Grep仅适用于小写和空格

时间:2016-01-10 11:23:40

标签: regex bash grep gnu

我需要为仅包含小写字母和空格的行grep文件。这两个条件必须至少满足一次,并且不允许使用其他字符。

我知道如何grep只用于小写或仅用于空格,但我不知道如何在一个regexp / command中加入这两个条件。

我现在只有这个:

egrep "[[:space:]]" $DIR/$file | egrep -vq "[[:upper:]]"

当然会显示带有数字和/或特殊字符的行,这不是我想要的。 感谢。

3 个答案:

答案 0 :(得分:2)

这就是你需要的

-x匹配整行

第一个表达式匹配完全由空格和小写字母组成的行。

第二个表达式匹配同时包含空格和小写字母的行。

egrep -x '[[:lower:] ]*' $DIR/$file | egrep '( [[:lower:]])|([[:lower:]] )'

答案 1 :(得分:2)

awk可能更好地表达这样的条件:

awk '/^[ a-z]+$/ && /[a-z]/ && / /' file

也就是说,它会检查一行:

  • 仅包含空格和小写字母。
  • 它至少包含一个小写字母。
  • 它至少包含一个空格。

测试

$ cat a
hello this is something simple
but SUDDENLY not
wah
wa ah
$ awk '/^[ a-z]+$/ && /[a-z]/ && / /' a
hello this is something simple
wa ah

答案 2 :(得分:1)

首先grep所有只包含小写字符和空格的行,然后是所有包含至少一个空格的行。

egrep -x '[[:lower:][:space:]]+' "$DIR/$file" | egrep '[[:space:]]+'   

[:space:]元类也匹配制表符,如果需要,可以用普通空格替换。