我正在浏览电子邮件文本文件,并尝试获取来自某个域的电子邮件列表。
我在跑:
grep -oh "\w*domain.com\w*" file.txt
这会找到这些行,但只打印该“单词”,这意味着如果我在此列表上运行命令:
foo [email protected] bar
baz [email protected] abc
xyz [email protected] defg
klmn [email protected] ijk
yes [email protected] no
它会返回
domain.com
adomain.com
domain.com
我希望它返回包含“domain.com”的整个电子邮件地址:
[email protected]
[email protected]
[email protected]
这可能吗grep
?我需要告诉它不要将句号或@
符号视为断词。
编辑:同一行上有一堆不相关的数据,我不希望出现这些数据。
答案1
您正在寻找
grep -ho '\S*domain.com\S*' file
where\S
匹配非空白字符,因此在这种情况下grep
将匹配空白之间带有字符串“domain.com”的所有内容。
或者,如果您想在字符串中显式仅允许@
和(显然除了字母数字字符):.
grep -ho '[[:alnum:].@]*domain.com[[:alnum:].]' file
这种方式将从字符串中grep
提取。[email protected]
[[email protected]]
答案2
POSIXly:
<file tr -cs '[[:alnum:].@-_]' '[\n*]' | grep domain\.com
[email protected]
[email protected]
[email protected]