(^#| ^ * $)!是否支持这种正则表达式?

时间:2013-01-09 01:29:08

标签: regex shell

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

但它不起作用。

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

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


再次怀疑。 ' \' :关闭下一个字符的特殊含义。有时它是相反的。我知道的另一个是'()' ' {}&#39 ;.是' |'也是相反的一个?还存在一些吗? 感谢。

3 个答案:

答案 0 :(得分:1)

您需要使用\|而不是裸|才能使这个OK表达式与grep一起使用。

从手册页:

  

在基本正则表达式中,元字符?,+,{,|,(和)   失去他们的特殊意义;而是使用backslashed版本\?,   +,{,\ |,(和)。

所以试试这个表达式:

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

或:

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

答案 1 :(得分:0)

使用grep“或”

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

ref

答案 2 :(得分:0)

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

相关问题