Cygwin 意外标记 `(' 与 grep

Cygwin 意外标记 `(' 与 grep

我在 Windows 7 操作系统上使用 Cygwin。

我正在尝试匹配以下格式的电子邮件:x.y@enron.com

这是我的正则表达式:

grep [a-zA-Z0-9]+\.[a-zA-Z0-9]+@(E|e)nron\.com

它返回

-bash: syntax error near unexpected token `('

它在使用时有效正则表达式101.com

它应该匹配诸如[email protected]和 之类的电子邮件[email protected]

答案1

[\(以及)所有这些对 shell 都有特殊含义,如果您打算将它们在命令的参数中逐字传递(此处grep),则应加引号。

另请注意,诸如此类的范围[a-z]在 C 语言环境之外没有什么意义。

所以在这里,您可能想要:

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@(E|e)nron\.com' < some-file

或者:

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@[Ee]nron\.com' < some-file

E报告与扩展正则表达式 e相匹配的行xal数字字符num仅限于语言环境的字符C(在 Cygwin 上,没有变音符号的 ASCII 英语/拉丁字母和阿拉伯十进制数字;在 C 语言环境中[[:alnum:]][a-zA-Z0-9]匹配相同的东西)。

上面使用了'...'最强的引用形式(其中没有特殊的字符)。

+|(...)扩展正则表达式运算符(不是基本的正则表达式运算符如grepwithout所预期的那样-E)。没有-x,grep会寻找匹配项之内行,因此例如会匹配如下行:

[email protected] [email protected] whatever
              ^^^^^^^^^^^^^

如果没有LC_ALL=C,[[:alnum:]]可以匹配其他字母文字的字符(如希腊语、西里尔字母、韩语),并且[a-z]可以匹配一些带有变音符号的拉丁字符,如á, çÿ但不能匹配其他字母ź如 , z...

相关内容