0

所以,我有大约 60k-70k 的 vCard 文件并想检查(或者,此时,计数),哪些 vCard 包含邮件地址(EMAIL;INTERNET:me@my-domain.com)

我试图将 find 的输出传递给 awk,但我只是让 awk 处理文件列表,而不是处理每个文件的内容。我怎样才能让 awk 这样做?我尝试了 find、xargs 和 awk 的几种组合,但我没有让它正常工作。

谢谢你的帮助,沃尔

4

2 回答 2

2

我可能会用grep这个。

  • 如果要从文件中提取地址:

    grep -rio "EMAIL;INTERNET:.*@[a-z0-9-]*\.[a-z]*" *
    

    使用cut,sedawk删除前导EMAIL;INTERNET::

    ... | cut -d: -f2
    ... | sed "s/.*://"
    ... | awk -F: '{print $2}'
    
  • 如果您想要包含特定地址的文件的名称:

    grep -ril "EMAIL;INTERNET:me@my-domain\.com" *
    

如果grep无法一次处理那么多文件,请删除该-r选项并尝试使用findand xargs

find /start/dir -name "*.vcf" -print0 | xargs -0 -I {} grep -io "..." {}
于 2013-06-29T11:46:03.300 回答
0

grep递归可以做到这一点

grep -r 'EMAIL.+@'
于 2013-06-29T11:46:13.827 回答