此脚本从电子邮件的日期字段中删除时区:
#!/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
但是,我真的不想退出,因为当时没有打印电子邮件的正文。
答案 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。