如何用sed仅替换STRING1与STRING2之间的STRING3?
使用sed仅替换指定文本区间内的特定字符串
直接用以下sed命令就能实现需求:
sed '/^aaa/,/^ddd/s/^ccc/xxx/' your_file.txt
命令说明
/^aaa/,/^ddd/:划定处理的行范围——从以aaa开头的行起,到以ddd开头的行结束(该范围包含首尾行之间的所有内容,但仅对匹配替换规则的行生效)s/^ccc/xxx/:在上述范围内,把以ccc开头的行替换为xxx开头。如果需要替换行内任意位置的ccc,可以改成s/ccc/xxx/g(g表示全局替换该行内所有匹配项)
效果验证
输入文件内容:
aaa 12 bbb 23 ccc 34 ddd 45 eee 56 ccc 67
执行命令后输出:
aaa 12 bbb 23 xxx 34 ddd 45 eee 56 ccc 67
变量适配写法
如果需要通过变量动态定义匹配和替换内容,可以用:
STRING1="aaa" STRING2="ddd" STRING3="ccc" REPLACE="xxx" sed "/^$STRING1/,/^$STRING2/s/^$STRING3/$REPLACE/" your_file.txt
内容的提问来源于stack exchange,提问作者hsid
相关产品推荐
相关产品推荐

