首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅删除第一次和第三次出现的块的内容

仅删除第一次和第三次出现的块的内容
EN

Stack Overflow用户
提问于 2018-06-03 02:14:40
回答 1查看 80关注 0票数 0

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}
EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档