#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.