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

Bob*_*b96 4 unix bash shell grep regular-language

我想使用 grep 和正则表达式来搜索文本文档。\n当我输入以下内容时:

\n\n
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\xc3\x84\xc3\x96\xc3\x9c][A-Za-z\xc3\xa4\xc3\xb6\xc3\xbc]* document.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了:

\n\n
-bash: syntax error near unexpected token `('\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

例如,我的文档中有以下句子:

\n\n
Der Mann und die Frau haben ein Haus.\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想提取:

\n\n
Der Mann\ndie Frau\nein Haus\n
Run Code Online (Sandbox Code Playgroud)\n

Tom*_*ech 5

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

\n\n
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\xc3\x84\xc3\x96\xc3\x9c][A-Za-z\xc3\xa4\xc3\xb6\xc3\xbc]*' document.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n

  • 或者简单地使用“-i”直接忽略大小写。 (3认同)
  • 特别是如果您使用“-i”,则使用更长的正则表达式要简单得多。最小化它的长度并不会真正给你带来任何超过 `(die|das|der|den|dem|des|ein|eine|einen|einem|einer|eines)` 的东西。 (2认同)