代码之家  ›  专栏  ›  技术社区  ›  Jaelebi

在bash中解析电子邮件中的发件人姓名

  •  2
  • Jaelebi  · 技术社区  · 17 年前

    我在一个文件夹中有多个文件,每个文件都有一封电子邮件。每条消息都有一个标题,格式如下


    致:help@abc.com
    发件人:发件人姓名

    3 回复  |  直到 17 年前
        1
  •  2
  •   John    17 年前

    假设消息中间不可能有随机的报头,那么这应该可以做到:

    cat * | grep '^From: ' | sort -u
    

    for f in * ; do cat $f | grep '^From: ' | head -1 | sort -u ; done
    

        2
  •  0
  •   che    17 年前

    您想过滤掉发件人姓名或电子邮件地址吗?通常你在“发件人”行中都有,比如

    From: Lessie <etxhakk@ericsson.se>
    

    您可以使用 sed

    sed 's/^From: //;s/ *<[^>]*> *//'
    

    ls | while read filename
    do
        grep '^From: ' $filename | head -n1 | sed 's/^From: //;s/ *<[^>]*> *//;s/^"//;s/"$//'
    done | sort -u
    
        3
  •  0
  •   jabbie    17 年前

    收紧一些答案。(我还没有足够的声誉来发表评论。)以下应该就足够了:

    grep -m 1 '^From: ' * | sed -'s/^From: *//' | sort -u
    

    将为您提供目录中所有邮件的唯一发件人地址列表。如果你想清理地址部分,你可以像che的答案一样在sed命令中添加更多内容。没有必要“cat*|grep”。