разобрать сообщение электронной почты на имя отправителя в bash - PullRequest
2 голосов
/ 03 мая 2009

У меня есть несколько файлов в папке, и у каждого из них есть одно сообщение электронной почты. Каждое сообщение имеет заголовок в формате

Тема: форматирование шрифтов
Кому: help@abc.com
От: имя отправителя

тело сообщения

Я хочу получить все уникальные имена отправителей из всех сообщений (в каждом файле только 1 сообщение). Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 03 мая 2009

Предполагая, что в середине сообщений не может быть случайных заголовков, тогда это должно сработать:

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

Если в середине сообщений могут быть другие вводящие в заблуждение строки «От:», вам просто нужно убедиться, что вы получаете только первую подходящую строку из каждого сообщения, например:

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

Очевидно, вы можете заменить * в любой команде на другой глобус или список имен файлов.

0 голосов
/ 23 мая 2009

Чтобы подтянуть некоторые ответы. (У меня пока недостаточно репутации, чтобы комментировать.) Должно быть достаточно:

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

Предоставит вам список уникальных адресов для всех сообщений в каталоге. Если вы хотите очистить адресную часть, вы можете добавить больше к команде sed, как ответ che. Там нет необходимости, чтобы «кошка * | Grep».

0 голосов
/ 03 мая 2009

Хотите отфильтровать имена отправителей или адреса электронной почты? Обычно у вас есть оба в строках "От", таких как

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...