sed命令如何实现从第3行到末行仅在含C的行中替换A为B
问题原因
你写的命令存在两个核心错误:
- 条件匹配语法错误
sed 中如果需要同时满足「行范围在第3行到最后一行」+「行包含单词C」两个条件,需要把内容匹配规则和替换动作放在行范围对应的大括号{}内。你原来的写法会被sed错误解析为「从第3行开始,到第一个匹配到C的行结束的所有行」都执行替换,完全不符合你的需求,甚至会错误匹配到范围外的行。 - 缺少全局替换标志
s/A/B/默认只会替换每行第一个出现的A,要替换该行所有的A,需要在替换命令末尾加g全局标志。
正确命令
sed '3,${/C/s/A/B/g}' file > newfile
命令说明
3,$划定处理范围是第3行到文件最后一行{}包裹该范围下要执行的所有动作/C/仅匹配范围内包含C的行s/A/B/g把匹配行中所有的A替换为B
内容的提问来源于stack exchange,提问作者Saad Shamim
相关产品推荐
相关产品推荐

