仅对小写和空格进行 Grep

Grep only for lowercase and spaces

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

我知道如何仅针对小写或 space 进行 grep,但我不知道如何将这两个条件合并为一个 regexp/command。

我现在只有这个:

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

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

这就是您所需要的

-x 匹配整行

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

第二个表达式匹配同时具有 space 和小写字母的行。

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

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

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

也就是说,它检查一行:

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

测试

$ 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

首先grep所有只包含小写字符和白色space的行,然后是所有包含至少一个白色space.

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

[:space:] meta class 也匹配制表符,如果需要可以用普通 space 替换。