意外令牌附近的语法错误`('bash

时间:2017-05-12 10:42:00

标签: bash shell unix grep regular-language

我想使用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

1 个答案:

答案 0 :(得分:4)

将模式放在单引号中,并使用-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 OR单个字符。

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