如何用sed删除匹配模式之后的所有行(保留匹配行)
解决sed删除匹配行后所有内容但保留匹配行的问题
需求说明
需要删除文本中匹配1450/pm2-hmc2模式之后的所有行,但保留该匹配行。
原命令问题
你尝试的命令:
sed '/1450/pm2-hmc2/,$d' input.txt
会同时删除匹配行,原因是该命令定义的地址范围是「从匹配行到文件末尾」,d操作会删除这个范围内的所有行,包括匹配行本身。
正确命令
方法一:使用sed退出命令q(最简洁)
sed '/1450\/pm2-hmc2/q' input.txt
- 原理:当sed匹配到包含
1450/pm2-hmc2的行时,会先输出该行,然后执行q命令直接退出sed,后续行不再处理,自然不会被输出。
方法二:使用条件分支控制输出
如果需要更灵活的逻辑,也可以用分支命令实现:
sed '/1450\/pm2-hmc2/,$!b; //!d' input.txt
- 解释:
/1450\/pm2-hmc2/,$!b:对不在「匹配行到末尾」范围内的行,直接跳过处理(输出原行)//!d:对在范围内的行,仅删除非匹配行,保留匹配行
处理后结果示例
执行正确命令后,输出内容会截止到匹配行:
/root/abhishek/HPC/2023-01-03-1440/pm1-hmc1.txt /root/abhishek/HPC/2023-01-03-1440/pm1-hmc2.txt /root/abhishek/HPC/2023-01-03-1440/pm2-hmc0.txt /root/abhishek/HPC/2023-01-03-1440/pm2-hmc1.txt /root/abhishek/HPC/2023-01-03-1440/pm2-hmc2.txt /root/abhishek/HPC/2023-01-03-1445/pm0-hmc0.txt /root/abhishek/HPC/2023-01-03-1445/pm0-hmc1.txt /root/abhishek/HPC/2023-01-03-1445/pm0-hmc2.txt /root/abhishek/HPC/2023-01-03-1445/pm1-hmc0.txt /root/abhishek/HPC/2023-01-03-1445/pm1-hmc1.txt /root/abhishek/HPC/2023-01-03-1445/pm1-hmc2.txt /root/abhishek/HPC/2023-01-03-1445/pm2-hmc0.txt /root/abhishek/HPC/2023-01-03-1445/pm2-hmc1.txt /root/abhishek/HPC/2023-01-03-1445/pm2-hmc2.txt /root/abhishek/HPC/2023-01-03-1450/pm0-hmc0.txt /root/abhishek/HPC/2023-01-03-1450/pm0-hmc1.txt /root/abhishek/HPC/2023-01-03-1450/pm0-hmc2.txt /root/abhishek/HPC/2023-01-03-1450/pm1-hmc0.txt /root/abhishek/HPC/2023-01-03-1450/pm1-hmc1.txt /root/abhishek/HPC/2023-01-03-1450/pm1-hmc2.txt /root/abhishek/HPC/2023-01-03-1450/pm2-hmc0.txt /root/abhishek/HPC/2023-01-03-1450/pm2-hmc1.txt /root/abhishek/HPC/2023-01-03-1450/pm2-hmc2.txt
内容的提问来源于stack exchange,提问作者Punith M
相关产品推荐
相关产品推荐

