如何将 OR 与 grep 一起使用?

zmk*_*mkm 3 grep regular-expression

我运行了grep 'd(o|i)g' a.txta.txt 包含dig但没有返回任何内容。这是正确的匹配方式dogdig

And*_*ter 7

是的,d(o|i)g这是正确的方法。你也可以这样做,d[oi]g因为你正在处理单个字符。

您需要-E在 grep 调用中使用该标志来获取扩展的正则表达式。

$ cat a.txt
bird
dog
cat
dug
$ grep 'd(o|i)g' a.txt
$ grep -E 'd(o|i)g' a.txt
dog
Run Code Online (Sandbox Code Playgroud)

  • 对于这种特殊情况,执行此操作的标准方法是:按照您的建议,`grep -e dog -e dig a.txt` 或 `grep 'd[io]g' a.txt`。 (4认同)

Rud*_*diC 5

您需要转义正则表达式元字符,例如

> echo dig | grep "d\(o\|i\)g"
dig
Run Code Online (Sandbox Code Playgroud)

,或者您可以切换到 ERE(“扩展正则表达式”):

echo dig | grep -E "d(o|i)g"
dig
Run Code Online (Sandbox Code Playgroud)

  • 带有基本正则表达式 (BRE) 的 `\|` 是 GNU 扩展。POSIX BRE 没有交替运算符。POSIX ERE(使用 `grep -E`)可以。 (6认同)