找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18650|回复: 5

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

[复制链接]
发表于 2022-9-27 22:29:05 | 显示全部楼层 |阅读模式
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

请问下该怎么实现?
发表于 2022-9-28 07:55:03 | 显示全部楼层

  1. sed -i -e "/title b/ititle b" -e"/title a1/,/title b/d" test.txt
复制代码
 楼主| 发表于 2022-9-28 10:23:30 | 显示全部楼层
本帖最后由 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,......或者其他的。
 楼主| 发表于 2022-9-28 14:23:44 | 显示全部楼层
本帖最后由 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
发表于 2022-9-28 15:24:27 | 显示全部楼层
改用awk试试

  1. awk "/title [^a]/;/title a1/,/title [^a]/{next};1" test.txt
复制代码
 楼主| 发表于 2022-9-28 17:24:54 | 显示全部楼层
回复 5# hfxiang


    你这个代码,我用awk试了好像不行啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 15:32 , Processed in 0.018537 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表