如何使用grep查找仅包含小写字母的行

5

我是新手,正在学习使用bash和grep。

grep ^[a-z] file.txt 将显示所有以小写字母开头的行
grep [a-z] file.txt 将显示所有包含小写字母的行

无法找到如何显示所有小写字母的行,请问有人可以帮忙吗?


你只需要在第一个示例中结束量词和锚定。 - devnull
2个回答

7
您可以在egrep中使用锚定符来创建正则表达式:
egrep '^[[:lower:]]+$' file

这个 egrep 只能找到那些行中 仅包含小写字母(甚至空格都不允许)的内容。


1
我会使用 egrep '^[[:lower:]]+$' file,因为我发现 [a-z] 在多语言系统上可能会失败。 - Jotne

4

这将匹配并排除包含除了 a-z 以外的其他内容的行。

cat file.txt | grep -v '[^[:lower:]]'

如果您需要允许符号(例如此示例允许 !, +, ,):

cat file.txt | grep -v '[^[:lower:]!+,]'

3
不必使用 "cat" 命令和管道符号,只需要使用 "grep ... file" 命令即可。 - fedorqui
使用 grep -v '[^[:lower:]]' file - Jotne
1
@fedorqui:是啊,我知道,但老习惯难改。当我使用grep查找东西时,我的输入通常来自某种命令,因此要用到管道符 :) - Unknown
@Bernhard:[a-z] 没有任何问题,除非你想匹配一些在某些语言环境中被认为是小写字母的其他字符。 - Unknown
@Bernhard [a-z] 在多语言系统上可能会失败。即使您要求小写字母,它也可能会给出大写字母。请在Google上搜索此问题。使用 [:lower:]。它应该适用于所有情况。 - Jotne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接