我希望删除以相同模式“CURRENT”开头的顺序行,例如,如果有折叠文件,则使用sed或awk:
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
结果就像
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 ;
发布于 2016-03-17 10:20:29
在vi
中打开它,您可以使用:
:%s/\(\(\_^CREATE CURRENT\).*\n\)\(\2.*\n\)*/\1/g
如果在文件末尾有CREATE CURRENT
行,这可能会在文件末尾留下一个额外的换行符。如果是这样的话,可以使用:$d
删除额外的行。
如果您对此很满意,可以使用:x
保存它,或者放弃更改,然后使用:q!
退出
若要保留每组重复的最后一组,而不是第一组,请使用:
:%s/\(\(\_^CREATE CURRENT\).*\n\)\+\(\2.*\n\)/\3/g
发布于 2016-03-17 11:00:29
我试了一下这个,它还能用
sed '/^CREATE CURRENT/ { :a $! { N; /\nCREATE CURRENT/ { s/.*\n//; ba; }; }; }' file
这是结果
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
https://unix.stackexchange.com/questions/270386
复制相似问题