我有几个 txt 文件,如果文件中包含文本“Provider”,我想从该文件中提取电子邮件。文本文件的格式不一样。 “provider”可以出现在文本中的任何位置。
这是一些简短的示例:
文件1.txt
姓名: Joe1
提供者
...
电子邮件[电子邮件受保护]
文件2.txt
姓名: Joe2
...
客户
...
电子邮件[电子邮件受保护]
文件3.txt
姓名: Joe3
...
提供者
电子邮件[电子邮件受保护]
我正在使用这个短代码,但它返回所有电子邮件
$ awk -F, '{
for (i=1; i<=NF; i++)
if ($i ~ /@/)
print $i
}' *
你能帮我吗?
谢谢
答案1
$ awk 'FNR==1 { provider = False }
$0 ~ /Provider/ { provider = True}
$0 ~ /@/ && provider == True {
for (i=1; i<=NF; i++) {
if ($i ~ /@/) print $i;
}
}' *
- 对于每个文件设置
provider
为False
第一行 - 如果一行包含
Provider
将提供程序设置为True
- 如果一行包含 an
@
并且之前见过该单词Provider
,则迭代字段并打印包含该单词的字段@
答案2
你可以试试:
for fname in file*.txt
do
if grep 'Provider' ${fname} &> /dev/null ; then
grep -oP 'Email[[:space:]]*\K(.*@.*)' ${fname}
fi
done
答案3
grep -l Provider file*.txt | xargs grep -o '[^@[:space:]]+@[^@[:space:]]+'
对于电子邮件地址,有更准确的正则表达式,例如[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,}
,如果您需要更精确的话。