如何使用sed命令选择无规律指定行并完成内容修改?
sed离散指定行批量操作简化方案
针对无规律离散行的批量操作,有以下几种更简洁的实现方式:
方案1:整行替换最简写法
如果需求是直接替换选中行的全部内容,可以用c命令直接改写行内容,比正则替换更高效:
seq 10 | sed '1c11;3c11;7c11'
方案2:通用分支写法(支持任意行内操作)
如果需要对选中行执行替换、追加、删除等任意操作,可用b分支命令跳过非目标行,仅对目标行执行后续逻辑:
seq 10 | sed '1!3!7!b; s/.*/11/'
逻辑说明:
1!、3!、7!分别表示「不是第1行」「不是第3行」「不是第7行」- 三个条件同时满足时触发
b命令,直接结束当前行的处理,跳过后续操作 - 只有1、3、7三行不会触发跳过逻辑,执行后续的替换命令
方案3:可读性更高的分组写法(适合目标行较多的场景)
如果需要处理的离散行数量多,可将目标行地址与操作绑定分组,后续修改操作逻辑时只需改一次:
seq 10 | sed ' 1{ s/.*/11/ } 3{ s/.*/11/ } 7{ s/.*/11/ } '
内容的提问来源于stack exchange,提问作者sirenfrappe
相关产品推荐
相关产品推荐

