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

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

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

我在跑:

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]

相关内容