perl -0ne 'print sort /(#+[^#]*)/g' file.txt
perl -0
смазывая весь файл/(....) /g
сопоставить и извлечь записипечать сортировки ...
отсортировать и распечатать их Метод formail -s
задокументирован с демонстрационным скриптом на странице руководства procmail
; найдите эту фразу:
Procmail также может быть вызван для постобработки уже заполненного системного почтового ящика.
Вы также можете найти это в http://www.iki.fi/era/procmail/mini-faq.html#split
Если ваш почтовый ящик не является отдельным файлом Berkeley mbox, скорее всего, вы есть каталог, в котором каждый файл представляет собой отдельное сообщение. В этом случае вы можете просто обработать его с помощью
for f in folder/*; do
procmail -options <"$f"
# maybe rm "$f" to remove the original after processing completes
done
В качестве примера того, как фильтровать по отправителю, простой рецепт будет примерно таким, как
# If your mailbox destination is maildir, no locking is required
:0: # so you could lose the second colon here, and in subsequent examples
* ^From:.*\<alice@example\.com\>
alice
:0:
* ^From:.*\<bob@example\.net\>
bob
и т. Д. Это проверяет заголовок «От:», который обычно подразумевают под «отправителем», хотя есть еще два часто используемых поля (отправитель конверта, который обычно находится в Return-Path:
, и фактический Отправитель: заголовок
, который является необязательным, но часто заполняется отправляющим программным обеспечением, когда заголовок От:
не является фактическим отправителем).
Точно так же, чтобы классифицировать по Subject:
, просто укажите регулярное выражение, которое соответствует темам, которые вы хотите захватить.
:0:
* ^Subject: *((Fwd?|Re): *)*\[gunk]
gunk-list
найдет сообщения с заголовками «Тема», содержащими метку [gunk]
, которой может предшествовать пробел и / или Re:
и / или Fw:
и / или Fwd:
.
Предполагая, что ваш файл почтового ящика находится в формате mbox, вы можете использовать утилита formail
, которая поставляется с procmail, для запуска команды для каждого письма с параметром -s
, чтобы сообщить ему, что ввод - это почтовый ящик, а не просто отдельное письмо.Эта команда может быть procmail
, если вы хотите применить свои правила procmail, или любой другой командой, которая принимает почту на стандартный ввод и делает с ней все, что захочет.
formail -s procmail <Mboxrd && mv Mboxrd Mboxrd.done
Другой подход - загрузить почтовый ящик в Mutt и применить некоторые макросы. Это имеет то преимущество, что оно не зависит от формата почтового ящика, но имеет недостаток, заключающийся в том, что макросы mutt могут быть загадочными (хотя не обязательно более загадочными, чем правила procmail). Еще одно преимущество использования mutt заключается в том, что он может перемещать по одному письму за раз, поэтому, если оно прервано на полпути, оно может возобновиться с того места, где оно было остановлено.