sed 多行删除模式 [英] sed multiline delete with pattern
本文介绍了sed 多行删除模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想删除模式的所有多行出现
I want to delete all multiline occurences of a pattern like
{START-TAG
foo bar
ID: 111
foo bar
END-TAG}
{START-TAG
foo bar
ID: 222
foo bar
END-TAG}
{START-TAG
foo bar
ID: 333
foo bar
END-TAG}
我想删除 START-TAG 和 END-TAG 之间包含特定 ID 的所有部分.
I want to delete all portions between START-TAG and END-TAG that contain specific IDs.
所以要删除 ID:222,只剩下这个:
So to delete ID: 222 only this would remain:
{START-TAG
foo bar 2
ID: 111
foo bar 3
END-TAG}
{START-TAG
foo bar 2
ID: 333
foo bar 3
END-TAG}
我有一个应该删除的 ID 黑名单.
I have a blacklist of IDs that should be removed.
我假设一个非常简单的多行 sed 正则表达式脚本可以做到.有人可以帮忙吗?
I assume a quite simple multiline sed regex script would do it. Can anyone help?
它与问题非常相似:sed multiline replace但不一样.
It is very similar to Question: sed multiline replace but not the same.
推荐答案
您可以使用以下内容:
sed '/{START-TAG/{:a;N;/END-TAG}/!ba};/ID: 222/d' data.txt
细分:
/{START-TAG/ { # Match '{START-TAG'
:a # Create label a
N # Read next line into pattern space
/END-TAG}/! # If not matching 'END-TAG}'...
ba # Then goto a
} # End /{START-TAG/ block
/ID: 222/d # If pattern space matched 'ID: 222' then delete it.
这篇关于sed 多行删除模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文