Below sed删除{content-start}和{content-end}之间出现的所有块,但只删除第1和第3个块,而不删除第2个块。
sed -ie '/{content-start.*}/,/{content-end}/d' test.txt
test.txt:
{content-start}
abc1
def1
ghi1
{content-end}
{content-start}
abc2
def2
ghi2
{content-end}
{content-start}
abc3
def3
ghi3
{content-end}
发布于 2018-06-03 17:41:24
这可能适用于您(GNU sed):
sed -n '/{content-start}/{x;s/^/x/;x;:a;N;/{content-end}/!ba;x;/^x\{2\}$/{x;p;x};x}' file
使用-n
选项复制类似于grep的seds。收集开始标记和结束标记之间的线条。在集合开始时,将一个标志附加到要用作计数器的保留空间。收集完所需的所有行后,仅当保留空间包含所需数量时才打印。
此解决方案仅打印第二个块,但是,如果您只想排除块1和块3,则:
sed '/{content-start}/{x;s/^/x/;x;:a;N;/{content-end}/!ba;x;/^x\{1\}$/{x;d};/^x\{3\}/{x;d};x}' file
此解决方案仅删除数据块1和3。
https://stackoverflow.com/questions/50659831
复制相似问题