Grep 'OR' 正则表达式问题

Grep 'OR' 正则表达式问题

我正在尝试使用 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已弃用

相关内容