2

我使用 *grep '(^#|^ $)' 文件来搜索以 '#' 或空行开头的文本中的行。

但它不起作用。

因为当我阅读《sed & awk》这本书时,它说grep并没有完全使用正则表达式语法中的所有元字符。

所以我怀疑。表达式 '(^#|^ *$)' 在正则表达式中是非法的吗?或者是因为 grep 不支持这种语法。


又是疑惑。'\' :关闭后面字符的特殊含义。有时它是相反的。我知道的相反的是'()''{}'。是'|' 也是对面的吗?还存在一些吗?谢谢。

4

3 回答 3

1

您需要使用\|而不是bare|来使这个本来可以的表达式与grep 一起使用。

从手册页:

在基本正则表达式中,元字符 ?、+、{、|、( 和 ) 失去了它们的特殊含义;而是使用反斜杠版本\?、+、{、\|、(和)。

所以试试这个表达式:

grep '\(^#\|^ *$\)' input

或者:

grep '^\(#\| *$\)' input
于 2013-01-09T01:33:04.757 回答
0

使用 grep “或”

grep -e '^#' -e '^ *$' filename

参考

于 2013-01-09T01:32:52.417 回答
0

您可以使用 egrep,它是 grep 的增强版本。或者,将-E选项添加到grep. 此外,为避免与 shell 中的特殊字符(例如 *、|)发生冲突,您最好将 regexp 用引号括起来。

于 2013-01-09T01:33:54.360 回答