首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除使用awk或sed以相同模式开头的顺序行。

删除使用awk或sed以相同模式开头的顺序行。
EN

Unix & Linux用户
提问于 2016-03-17 09:48:34
回答 2查看 351关注 0票数 0

我希望删除以相同模式“CURRENT”开头的顺序行,例如,如果有折叠文件,则使用sed或awk:

代码语言:javascript
运行
复制
CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'bbbb' ;
CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS A PARAGRAPH 2 ;
THIS IS A PARAGRAPH 2-2

结果就像

代码语言:javascript
运行
复制
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;   
THIS IS A PARAGRAPH 1-1 
CREATE CURRENT = 'cccc' ;
THIS IS a PARAGRAPH 2
THIS IS a PARAGRAPH 2-2 ;
EN

回答 2

Unix & Linux用户

发布于 2016-03-17 10:20:29

vi中打开它,您可以使用:

代码语言:javascript
运行
复制
:%s/\(\(\_^CREATE CURRENT\).*\n\)\(\2.*\n\)*/\1/g

如果在文件末尾有CREATE CURRENT行,这可能会在文件末尾留下一个额外的换行符。如果是这样的话,可以使用:$d删除额外的行。

如果您对此很满意,可以使用:x保存它,或者放弃更改,然后使用:q!退出

若要保留每组重复的最后一组,而不是第一组,请使用:

代码语言:javascript
运行
复制
:%s/\(\(\_^CREATE CURRENT\).*\n\)\+\(\2.*\n\)/\3/g
票数 0
EN

Unix & Linux用户

发布于 2016-03-17 11:00:29

我试了一下这个,它还能用

代码语言:javascript
运行
复制
sed '/^CREATE CURRENT/ { :a $! { N; /\nCREATE CURRENT/ { s/.*\n//; ba; }; }; }' file

这是结果

代码语言:javascript
运行
复制
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS A PARAGRAPH 2 ;
THIS IS A PARAGRAPH 2-2
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/270386

复制
相关文章

相似问题

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