如何将sed脚本仅应用于电子邮件的标题?

时间:2011-06-07 21:18:15

标签: sed newline

此脚本从电子邮件的日期字段中删除时区:

#!/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 个答案:

答案 0 :(得分: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。