Как применить скрипт sed только к заголовкам писем? - PullRequest
3 голосов
/ 08 июня 2011

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

#!/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 Ответ

1 голос
/ 08 июня 2011

Вы, вероятно, можете сделать это с помощью функции ветки и сделать так, чтобы ветка выполняла обычную печать./^$/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.

...