sed - 根据条件删除块的内容
问题描述
下面的 sed 删除 {content-start} 和 {content-end} 之间所有出现的块,但只想删除包含 sting 'labtest' 的块。
sed -ie '/{content-start.*}/,/{content-end}/d' test.txt
测试.txt
{content-start}
abc1
labtest
def1
ghi1
{content-end}
{content-start}
abc2
def2
labtest
ghi2
{content-end}
{content-start}
abc3
def3
ghi3
{content-end}
解决方案
这可能对您有用(GNU sed):
sed '/{content-start}/{:a;N;/{content-end}/!ba;/labtest/d}' file
收集开始和结束字符串之间的行,然后测试所需字符串的集合并删除如果是肯定的。