[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 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

请问下该怎么实现?

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

TOP

本帖最后由 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,......或者其他的。

TOP

本帖最后由 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

TOP

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

TOP

回复 5# hfxiang


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

TOP

返回列表