sed - SED删除匹配和继续行之前的行

  显示原文与译文双语对照的内容
0 0

我有一个类似这样的文件:


Begin 
Certificate 
End 

Begin 
PKIValue1 
End 

Begin 
PKIValue2 
End 

Begin 
Certificate 
End

我想删除与 Certificate 关联的三行,但保留 PKIValues的剩余 BeginEnd

我一直在测试这个SED行:


sed -n -e '/Certificate/{x;1!p;g;$!N;p;D;}' -e h $cert_file>PKI.txt

那一行与我想要的相反。 它只保留 Certificate 值和关联的BeginEnd 。 如何删除 Certificate,但保留 PKIValues的其他行?

时间: 原作者:

0 0

请考虑:


$ sed -n -e '/Begin/{N;N;N;/Certificate/!p;}' file
Begin
PKIValue1
End

Begin
PKIValue2
End

使用指导


`/Begin/{N;N;N;/Certificate/!p;}`

每次有一条 Begin 线,我们收集它和下三行 N;N;N; 到 Pattern 空间。 如果 Pattern 空间现在包含 Certificate,那么我们跳过这个分组。 如果没有,我们就把它打印出来。

0 0

这里小型 gnu awk 应该执行以下操作:


awk '!/Certificate/' RS= ORS="nn" file
Begin
PKIValue1
End

Begin
PKIValue2
End

RS 记录选择器设置为nothing使它在块模式下工作( gnu函数)
/Certificate/' 只删除带有 Certificate的块!

如果块中有多个行,则这工作正常。

原作者:
...