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?我需要告诉它不要将句号或@符号视为断词。
编辑:同一行上有一堆不相关的数据,我不希望出现这些数据。
您正在寻找
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]