我正在尝试使用egrep -o -e
从文件中获取电子邮件地址,并且在行尾有地址问题。
这是我的正则表达式:
egrep -o -e "[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+" ~/myfile.txt
我意识到这不会捕获电子邮件地址的每个变体,但如果地址位于一行的末尾,这就是我得到的:
user@_12345@myemail.com\ul
所以我想我会尝试消极的前瞻,但我不知道如何正确使用它。我在线阅读了一些内容,但我对它的运作方式感到困惑。
这是我尝试过的:
egrep -o -e "(?!\\[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+)" ~/myfile.txt
Bash因event not found: \\[._a
有什么建议吗?
答案 0 :(得分:4)
{b}中正在插入!
作为历史扩展命令。您应该使用单引号而不是双引号来阻止这种情况。
但是,您应该注意,您的grep
版本可能也不支持否定前瞻。在这种情况下,您需要更强大的正则表达式工具,例如perl
或ack
。
答案 1 :(得分:2)
点代表什么?
"[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+"
^
here
匹配at符号。如果你删除它,你的原始正则表达式没有预测将起作用。
此外,!
是bash(历史扩展)中的特殊字符。你必须反斜杠才能按字面意思使用它。