我已经阅读了手册,但我仍然不确定它是如何工作的。它说
-e pattern
,--regexp=pattern
指定在搜索输入期间使用的模式:如果输入行匹配任何指定的模式,则选择该输入行。
-e
当使用多个选项指定多个模式时,或者当模式以破折号 (' ') 开头时,此选项最有用-
。
但我不明白这与没有-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
同时搜索多个模式,就像您可以使用|
操作员一样?
当我跑
Grep 搜索术语 1 和术语 2(即它返回匹配搜索 1 或搜索 2 或两者的行),其中运行相同的命令而没有 -e 错误 - 即 -e 允许单独指定多个不同的模式。
正如在另一个答案中指出的那样,正如您所猜测的那样,
grep -e p1 -e p2
相当于grep -E 'p1|p2'
; 我能想到有几次我可能更喜欢一种形式而不是另一种形式,两种形式都有效。而且,正如手册页所说,它可以保护以破折号开头的表达式,并且没有很多其他好的方法可以做到这一点。换句话说,
egrep -e -test
.我认为这个选项也可能与其他命令保持一致,例如,
sed -e
和awk -e
.