如果每行中的模式匹配,则删除连续行

如果每行中的模式匹配,则删除连续行

再会,

我想知道当发现这种模式时如何删除连续行:/^pt [a-z]\npy [0-9][0-9][0-9][0-9]\n//

预期输入

pt a
py 01234
pt b
cd abc
py 5678

预期输出

pt b
cd abc
py 5678

预先非常感谢您提供任何线索。

答案1

这应该有效:

sed '/^pt [a-z]/{N;/py [0-9][0-9][0-9][0-9]/d}' your_file

扩展

  • 如果当前行匹配,/^pt [a-z]/我们就执行大括号之间的内容。
  • N将下一行追加到活动缓冲区。
  • 如果活动缓冲区现在匹配/py [0-9][0-9][0-9][0-9]/,我们删除(即不打印)活动缓冲区的内容。这是通过 实现的d

答案2

通过 Perl,

$ perl -00pe 's/^pt [a-z]\npy [0-9]{5}\n//' file
pt b
cd abc
py 5678

相关内容