Board logo

标题: [文本处理] sed删除两节之间的内容,两节的关键字部分相同 [打印本页]

作者: liuzhaoyzz    时间: 2022-9-27 22:29     标题: sed删除两节之间的内容,两节的关键字部分相同

sed删除两节之间的内容,两节的关键字部分相同
原文件:
title a1
1
2
title a1-2
3
4
5
6
title b
7
8
9
我想删除title a1到下一个title之间的部分,再删除title a1-2到下一个title之间的部分,删除第一个section1所在行,保留section2所在行,最终目的:
title b
7
8
9


请问下如何实现?
我看过类似的帖子:http://t.zoukankan.com/liuzhaoyzz-p-15605955.html,
sed -i '/\[section1\]/,/\[section2\]/{/\[section1\]/!{/\[section2\]/!d}}' test.txt
有所区别的是,我的案例中,想删除第一个section1所在行,保留section2所在行,section1与section2关键字部分又相同,这个怎么实现?
sed -i -e "/title a1/,/title/{/title/^!d}" test.txt
用上面的命令,结果是这样子的:
title a1
title a1-2
3
4
5
6
title b
7
8
9

请问下该怎么实现?

作者: hfxiang    时间: 2022-9-28 07:55

  1. sed -i -e "/title b/ititle b" -e"/title a1/,/title b/d" test.txt
复制代码

作者: liuzhaoyzz    时间: 2022-9-28 10:23

本帖最后由 liuzhaoyzz 于 2022-9-28 10:26 编辑

回复 2# hfxiang


    非常感谢您的回复和帮助!

您的代码不能完美地解决我的需求,因为title a1-2之后的title b不能用作搜索关键字,就是说title a1-2之后的title,可能是title b,title c,......或者其他的,是未知的,只有title关键字是已知的。
我的需求是已知title a1这个关键字,删除所有的title a1关键字到下一个title之间的行,包括title a1行和title a1-2行,但不包括下一个title行,下一个title行,可能是title b,title c,......或者其他的。
作者: liuzhaoyzz    时间: 2022-9-28 14:23

本帖最后由 liuzhaoyzz 于 2022-9-29 11:10 编辑

sed如何删除特定段落? - 第2页 - Shell-Chinaunix http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4250777&extra=&highlight=sed%2B%C9%BE%B3%FD&page=2

看了这个帖子,可以用下面的代码实现了:
sed -e "/title a1/{:a;$^!N;/\ntitle/^!{s/\n\(.*\)//;ta};/title/^!P;D}" -i test.txt
作者: hfxiang    时间: 2022-9-28 15:24

改用awk试试
  1. awk "/title [^a]/;/title a1/,/title [^a]/{next};1" test.txt
复制代码

作者: liuzhaoyzz    时间: 2022-9-28 17:24

回复 5# hfxiang


    你这个代码,我用awk试了好像不行啊?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2