我想删除模式的所有多行出现
{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}
Run Code Online (Sandbox Code Playgroud)
我想删除包含特定ID的START-TAG和END-TAG之间的所有部分.
所以删除ID:222只会保留:
{START-TAG
foo bar 2
ID: 111
foo bar 3
END-TAG}
{START-TAG
foo bar 2
ID: 333
foo bar 3
END-TAG}
Run Code Online (Sandbox Code Playgroud)
我有一个应该删除的ID黑名单.
我假设一个非常简单的多行sed正则表达式脚本会这样做.有人可以帮忙吗?
它与问题非常相似:sed multiline replace,但不一样.
and*_*lrc 12
您可以使用以下内容:
sed '/{START-TAG/{:a;N;/END-TAG}/!ba};/ID: 222/d' data.txt
Run Code Online (Sandbox Code Playgroud)
分解:
/{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.
Run Code Online (Sandbox Code Playgroud)