![如果每行中的模式匹配,则删除连续行](https://linux22.com/image/58693/%E5%A6%82%E6%9E%9C%E6%AF%8F%E8%A1%8C%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%EF%BC%8C%E5%88%99%E5%88%A0%E9%99%A4%E8%BF%9E%E7%BB%AD%E8%A1%8C.png)
再会,
我想知道当发现这种模式时如何删除连续行:/^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