文件内容:
17541 来自电子邮件 [电子邮件保护] 入站 策略管理器信封分析 分析器 17541 来自电子邮件 [电子邮件保护] 入站 策略管理器信封分析 分析器 17541 来自域名 test.co.uk 入站 策略管理器信封分析 分析器 17541 来自域名 yahoo.co.uk 入站 策略管理器信封分析 分析器 17541 来自电子邮件 [电子邮件保护] 入站 策略管理器信封分析 分析器
我使用该命令提取电子邮件并将其转换为新格式,但无法提取域。我使用“sort -u”,因为文件中有些邮件是重复的。
cat 1| grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b"|sed -e 's/^/E,/'|sort -u
grep domains 后的预期视图:
测试网 英国雅虎
答案1
您的 grep 表达式没有问题,但是 sed 表达式不起作用,请将其更改为:
< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | sed -e 's/[^@]*@//' | sort -u
假设输入文件名为1
。你也可以用 grep 完成整个操作:
< 1 grep -Eo '\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b' | grep -Eo '[^@]+$' | sort -u
答案2
这awk
句话给出了你想要的输出
awk '/From Email/ { if( !match($4,"@") ){ print $4 } }' inputfile
它选择包含“发件人电子邮件”的行并检查第四列是否包含@。match
如果您愿意,可以使用正则表达式将其与域而不是电子邮件地址匹配。
答案3
您可以使用 grep 命令从数据文件中提取电子邮件:
grep -oe "[a-zA-Z0-9._]\+@[a-zA-Z]\+.[a-zA-Z]\+" abc.txt
此命令将为您提供所有电子邮件地址。