Как заставить 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 
  • Как кодировать / декодировать JPG-файл для последовательности int?
  • Логический И в сценарии bash
  • Как сделать сценарий /etc/init.d похожим на запуск в X?
  • Передача имени файла скриптам с функцией автозаполнения
  • ссылочная переменная оболочки $ COLUMNS из сценария bash
  • bash script - функция цикла
  • Вход ssh из текстового файла
  • Как добавить текущую дату перед расширением файла для нескольких файлов в каталоге?
  • Подстановочный знак Bash для соответствия точно n символам
  • Последовательность Grep после / перед заменой -A / -B в AIX
  • Как отсортировать файлы в Bash с помощью ddmmyy timestamps в имени
  • Linux и Unix - лучшая ОС в мире.