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

#sed #newline

#sed #новая строка

Вопрос:

Этот скрипт удаляет часовой пояс из полей даты электронного письма:

 #!/bin/sed -rf
s/(^Date: (Sun|Mon|Tue|Wed|Thu|Fri|Sat),.*[0-9][0-9]:[0-9][0-9]:[0-9][0-9])  0900$/1/i
  

Однако я не хочу, чтобы часовой пояс удалялся, если в теле электронного письма появляется дата. Как я могу заставить sed завершать работу после появления двойной новой строки (сигнализирующей об окончании полей заголовка электронной почты)? Как я могу применить замены только к заголовку электронной почты? Возможно ли это в sed?Решение awk также было бы приемлемым.

Обновить:

Я выяснил, как выйти из sed, как я хотел, сопоставив пустую строку:

 /^$/q
  

Однако я действительно не хотел завершать работу, потому что тогда текст электронной почты не печатался.

Ответ №1:

Вероятно, вы можете сделать это, используя функциональность ветки, и заставить ветку выполнять обычную печать. /^$/b x

 #!/bin/sed -rf
x
/^MAGICTOKEN$/b body
x
s/(^Foo: bar).*/1/i
p
s/^$/MAGICTOKEN/
/^MAGICTOKEN$/x
d

: body
x
p
d
  

Конечно, если бы я делал это по-настоящему, я бы использовал perl.