[Computer]$ grep "foo|bar" filename
我理解上述命令应该返回文件名中存在“foo”或“bar”的每一行。手册页确认 | 为正则表达式或符号,并且代码独立适用于“foo”和“bar”。我遗漏了什么?
答案1
grep 默认使用基本正则表达式 (BRE)。手册页中写道:
基本正则表达式与扩展正则表达式: 在基本正则表达式中,元字符 ?、+、{、|、( 和 ) 失去其特殊含义;而是使用反斜杠版本 \?、+、{、\|、( 和 )。
因此,您要么必须逃避|
:
grep "foo\|bar" filename
或者打开扩展正则表达式:
grep -E "foo|bar" filename