使用 grep 打印所有不以空格分隔的匹配字符串

Par*_*ker 5 grep text-processing

我正在浏览电子邮件文本文件,并尝试获取来自某个域的电子邮件列表。

我在跑:

grep -oh "\w*domain.com\w*" file.txt
Run Code Online (Sandbox Code Playgroud)

这会找到这些行,但只打印该“单词”,这意味着如果我在此列表上运行命令:

foo abc@notit.com bar
baz bcd@domain.com abc
xyz cde@adomain.com defg
klmn def@notit.com ijk
yes efg@efg.domain.com no
Run Code Online (Sandbox Code Playgroud)

它会返回

domain.com
adomain.com
domain.com
Run Code Online (Sandbox Code Playgroud)

我希望它返回包含“domain.com”的整个电子邮件地址:

bcd@domain.com
cde@adomain.com
efg@efg.domain.com
Run Code Online (Sandbox Code Playgroud)

这可能吗grep?我需要告诉它不要将句号或@符号视为断词。

编辑:同一行上有一堆不相关的数据,我不希望出现这些数据。

jim*_*mij 3

您正在寻找

grep -ho '\S*domain.com\S*' file
Run Code Online (Sandbox Code Playgroud)

where\S匹配非空白字符,因此在这种情况下grep将匹配空白之间带有字符串“domain.com”的所有内容。

或者,如果您想在字符串中显式仅允许@.(显然除了字母数字字符):

grep -ho '[[:alnum:].@]*domain.com[[:alnum:].]' file
Run Code Online (Sandbox Code Playgroud)

这种方式将从字符串中grep提取。user@domain.com[user@domain.com]