Допустим, у меня есть 5 сообщений в / var / mail /, и я хочу прочитать одно сообщение за раз, а затем выполнить поиск строки в этом письме, прежде чем перейти к следующему сообщению. Есть ли команда, которую я могу использовать для разбора одного сообщения за раз?
Я ищу написать bash-скрипт, который будет читать все сообщения в файле mbox, а затем читать их по одному, чтобы я мог затем извлечь Subject, To, From & Status сообщения (код возврата). Мой план состоял в том, чтобы использовать grepmail для подсчета количества писем в файле, а затем использовать это число в цикле for, чтобы получать по одной почте за раз, и они выполняли операции над текстом. Что-то вроде:
$count = grepmail -r . /var/mail/user | awk '{print $2}'
for($i=1;$i<=$count;$i++) {
$content = *GetMessage* -number $i /var/mail/user
...
Do string operation on this message & save to $DelimitedData
...
}
$Delimiteddata
Я не могу понять, как получить одно сообщение за раз, чтобы выполнить над ним строковую операцию. Может кто-нибудь подсказать мне, какая команда / программа может помочь мне сделать это не в интерактивном режиме.
formail
Ответ @Gilles хорош, но также стоит знать, что маркер «начала сообщения» в файле формата mbox - это строка, начинающаяся с From
(«From» и пробел). Это может быть надежно использовано для разделения файлов mbox на отдельные сообщения с регулярным выражением, ^From
поскольку гарантированно НЕ находится в заголовках или теле сообщения (любые строки тела, которые начинаются с «От», изменяются при сохранении в mbox , обычно "> From" или аналогичный). См en.wikipedia.org/wiki/Mbox