我需要从文件中删除模式2和pattern3 之间pattern1 和之后的行,如下所示:aaaaaaaa
bbbbbbbb
pattern1 <-----After this line
cdededed
ddededed
pattern2
fefefefe <-----Delete this line
efefefef <-----Delete this line
pattern3
adsffdsd
huaserew
请您提出如何使用awk或sed或在perl中完成此操作的建议。
最佳答案
sed '/pattern1/,${ /pattern2/,/pattern3/{/pattern2/b; /pattern3/b; d;} };' file
格式:
/pattern1/,$ {
/pattern2/,/pattern3/ {
/pattern2/b;
/pattern3/b;
d;
}
}
解释:
/pattern1/,$
是pattern1
之后到文件/pattern2/,/pattern3/
是pattern2
和pattern3
之间的行范围/pattern2/b;
和/pattern3/b;
跳过pattern2
和pattern3
行,这些行不包括在范围内(请参阅the sed faq)d
删除更新
根据注释,可以重写内部块:
//!d
在哪里:
//
(一个空模式)与上次使用的正则表达式匹配(本例中为pattern2
和pattern3
!
反转下一个命令,以便它适用于除与d
删除这些行因此,完整的重写模式是:
/pattern1/,$ {
/pattern2/,/pattern3/ {
//!d
}
}
关于perl - 删除行: after pattern1 and between pattern2 and pattern3 using awk/sed/perl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10959982/