我使用 *grep '(^#|^ $)' 文件来搜索以 '#' 或空行开头的文本中的行。
但它不起作用。
因为当我阅读《sed & awk》这本书时,它说grep并没有完全使用正则表达式语法中的所有元字符。
所以我怀疑。表达式 '(^#|^ *$)' 在正则表达式中是非法的吗?或者是因为 grep 不支持这种语法。
又是疑惑。'\' :关闭后面字符的特殊含义。有时它是相反的。我知道的相反的是'()''{}'。是'|' 也是对面的吗?还存在一些吗?谢谢。
您需要使用\|
而不是bare|
来使这个本来可以的表达式与grep 一起使用。
从手册页:
在基本正则表达式中,元字符 ?、+、{、|、( 和 ) 失去了它们的特殊含义;而是使用反斜杠版本\?、+、{、\|、(和)。
所以试试这个表达式:
grep '\(^#\|^ *$\)' input
或者:
grep '^\(#\| *$\)' input
您可以使用 egrep,它是 grep 的增强版本。或者,将-E
选项添加到grep
. 此外,为避免与 shell 中的特殊字符(例如 *、|)发生冲突,您最好将 regexp 用引号括起来。