我正在尝试使用 grep 和正则表达式来查找文件中与 2 个可能字符串中的 1 个匹配的行。这是我的 grep:
$ grep "^ID.*(ETS|FBS)" my_file.txt
上面的 grep 没有返回结果。但是,如果我执行以下任一操作:
$ grep "^ID.*ETS" my_file.txt
或者
$ grep "^ID.*FBS" my_file.txt
我确实匹配特定的行。为什么我的 OR 正则表达式不匹配?先谢谢您的帮助!
答案1
使用正常的正则表达式,字符(
,|
和)
需要转义。所以你应该使用
$ grep "^ID.*\(ETS\|FBS\)" my_file.txt
使用时不需要转义扩展正则表达式(-E
)选项。参见man grep
“”部分Basic vs Extended Regular Expressions
。
答案2
如果您想使用多个分支(|
as or
),那么为了更加兼容,最好明确地说您想使用“现代 RE”。埃雷。
为此,请使用grep -E:
grep -E "^ID.*(ETS|FBS)" my_file.txt
要了解有关 RE、ERE 和整个“现代”ER 故事的更多信息,请参阅man 7 regex
。
或者,您可以使用egrep
代替grep
,但正如您可以从中读取的man grep
:
egrep 与 grep -E 相同。 fgrep 与 grep -F 相同
(...)
直接调用为埃格雷普或者fgrep是已弃用