Как заставить sed выполнять действия только в первом матче?

У меня есть сценарий bash, который извлекает заголовки из MIME-источника электронной почты. Идея заключается в том, что я хочу только заголовок заголовка сообщения ничего другого. Хотя это не совсем правильно.

Я хочу, чтобы он сделал следующее:

1) Начните с адреса электронной почты.
2) Изолируйте только ту часть, которая начинается с «From» (мой конкретный сервер почтовой доставки ALWAYS запускает заголовок с линией, содержащей это).
3) Захватите все строки под ним, пока не закончится первая строка.
4) Не беспокойтесь о том, чтобы захватить материал из остальной части письма.

Я думал, что могу сделать это с помощью этого шаблона sed: sed -n "/From/,/^$/p"

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

 ---------- Forwarded message ---------- From: Newsletter <newsletter@foo.com> Date: Wed, Jan 28, 2015 at 9:16 PM Subject: Blargenflugent To: examplerecipient@domain.com 

Как я могу заставить sed игнорировать контент после первого прерывания строки?

2 Solutions collect form web for “Как заставить sed выполнять действия только в первом матче?”

 sed '/From/,$!d;/./!q' <infile 

… вышеприведенное выражение инструктирует sed to d elete выводить все строки, которые делают ! не попадает в диапазон /From/ через последнюю строку. Каждый раз, когда он выделяет строку, он перестает читать свой скрипт и начинает свою работу со следующей строки ввода сверху – и поэтому он не читает следующую команду.

Таким образом, команда /./!q uit означает, что sed только q вводит вход в первую строку после первого появления From на своем входе, который делает ! не содержат по крайней мере одного . персонаж.

 sed -n '/From/!p;/From/{s/From/foo/;p;: rest; n; p; b rest;}' file 
  • для аутентификации требуется действительная дата, когда я подключаюсь к AWS S3
  • Скрипт, который распаковывает initrd, позволяет редактировать файл preseed.cfg, а пакеты его снова будут добавлены в cpio и gzip
  • Как преобразовать строку в число, интерпретируемое в определенной базе в сценарии bash?
  • Восстановление tty с помощью stty
  • Почему это пока не работает в Ubuntu?
  • Выполнение сценария оболочки
  • Сценарий оболочки для уведомления BackupPC не работает
  • Интерпретировать интерполированную переменную как литеральную строку в регулярном выражении Perl
  • подчеркивание с двумя переменными
  • Исправление или альтернатива для mktemp в OS X
  • Кластеризация идентичных файлов, игнорирующих пробелы и разрывы строк
  • Linux и Unix - лучшая ОС в мире.