bash 中意外标记“(”附近的语法错误

syntax error near unexpected token `(' in bash

我想使用 grep 和正则表达式来搜索文本文档。 当我输入这个时:

grep -o ((D|d)ie|(D|d)as|(D|d)e(r|n|m|s)|(ei|Ei)(n|ne|nen|nem|ner|nes)) [A-ZÄÖÜ][A-Za-zäöü]* document.txt

我明白了:

-bash: syntax error near unexpected token `('

我已经尝试将正则表达式放在引号中。通过这样做,我没有收到错误,但我也没有找到任何东西。谢谢你帮助我。

比如下面这句话在我的文档中:

Der Mann und die Frau haben ein Haus.

我要提取:

Der Mann
die Frau
ein Haus

将模式放在单引号中并使用 -E 启用扩展正则表达式支持。

grep -Eo '((D|d)ie|(D|d)as|(D|d)e(r|n|m|s)|(ei|Ei)(n|ne|nen|nem|ner|nes)) [A-ZÄÖÜ][A-Za-zäöü]*' document.txt

请记住 (D|d) 可以更简单地写在括号表达式 [Dd] 中。这同样适用于正则表达式的其他部分,您在其中对单个字符进行 OR-ing。

如评论中所述,另一个要考虑的选项是 -i 选项,这意味着完全忽略字符的大小写。