我已阅读手册,但仍然不确定它是如何工作的。它说
-e pattern
,--regexp=pattern
指定在搜索输入时使用的模式:如果输入行与任何指定的模式匹配,则选择该输入行。当
-e
使用多个选项指定多个模式时,或者当模式以破折号 ('-
') 开头时,此选项最有用。
但我不明白这与任何不带 的常规 grep 有何不同-e
。
下面是我用来解决该问题的代码:
apple@apples-MacBook-Pro ~ % cat testgrep
warning
critical
error
passage
warning|critical
apple@apples-MacBook-Pro ~ % grep -e "warning|critical" testgrep
warning|critical
apple@apples-MacBook-Pro ~ % grep "warning|critical" testgrep
warning|critical
apple@apples-MacBook-Pro ~ % grep -e 'warning|critical' testgrep
warning|critical
apple@apples-MacBook-Pro ~ % grep 'warning|critical' testgrep
warning|critical
apple@apples-MacBook-Pro ~ % grep -e "warning\|critical" testgrep
warning
critical
warning|critical
apple@apples-MacBook-Pro ~ % grep -e 'warning\|critical' testgrep
warning
critical
warning|critical
apple@apples-MacBook-Pro ~ %
如您所见,它们的行为方式似乎完全相同。我的理解是否正确?它们几乎是相同的,只是您可以-e
同时搜索多个模式,就像使用运算|
符一样。
答案1
当我跑步时
grep -e "search1" -e "search2"
Grep 同时搜索术语 1 和术语 2(即,它返回与搜索 1 或搜索 2 或两者匹配的行),而运行相同命令时不出现 -e 错误 - 即 -e 允许分别指定多个不同的模式。
答案2
正如另一个答案所指出的以及您所猜测的,grep -e p1 -e p2
相当于grep -E 'p1|p2'
;我能想到的只有极少数情况下我可能更喜欢一种形式而不是另一种形式,两种形式都可以。
但是,正如手册页所说,它可以保护以破折号开头的表达式,并且没有太多其他好方法可以做到这一点。换句话说,egrep -e -test
。
我认为此选项也可能是为了与其他命令保持一致,例如sed -e
和awk -e
。