如何用Sed或其他工具替换目标文件标记间的/qwertyad为/qwertyae
解决方案:在指定标记区间内替换字符串
使用Sed工具(最常用的文本处理工具)
Sed非常适合处理这种区间内的文本替换,这里我们可以用范围匹配+替换命令来实现:
基本命令(输出到新文件)
sed '/! unique start/,/! unique end/ s#/qwertyad#/qwertyae#g' input.txt > output.txt
原地修改原文件(直接编辑源文件)
- GNU Sed(Linux系统):
sed -i '/! unique start/,/! unique end/ s#/qwertyad#/qwertyae#g' input.txt
- BSD Sed(macOS系统):需要给
-i参数加一个空字符串作为备份后缀(如果不需要备份):
sed -i '' '/! unique start/,/! unique end/ s#/qwertyad#/qwertyae#g' input.txt
命令解释:
/! unique start/,/! unique end/:指定处理的行范围——从包含! unique start的行开始,到包含! unique end的行结束。s#/qwertyad#/qwertyae#g:替换命令,用#作为分隔符(避免和路径中的/冲突,比转义更直观),g表示全局替换(如果一行内有多个匹配项都会被替换)。
使用Awk工具(灵活的文本处理语言)
如果你更习惯用awk,也可以实现同样的效果:
基本命令(输出到新文件)
awk '/! unique start/{flag=1} flag{gsub(/\/qwertyad/, "/qwertyae")} 1; /! unique end/{flag=0}' input.txt > output.txt
命令解释:
/! unique start/{flag=1}:当匹配到标记开始行时,设置一个标记变量flag为1,开启替换模式。flag{gsub(/\/qwertyad/, "/qwertyae")}:当flag为1时,对当前行全局替换指定字符串。1:awk中1代表逻辑真,会执行默认动作——打印当前行。/! unique end/{flag=0}:当匹配到标记结束行时,将flag设为0,关闭替换模式。
示例验证
输入内容:
abc def efg ! unique start /qwertyad*.$fff|$sdf|$kkr.exe|these.stay.put ! unique end
执行命令后输出:
abc def efg ! unique start /qwertyae*.$fff|$sdf|$kkr.exe|these.stay.put ! unique end
内容的提问来源于stack exchange,提问作者Jane Smith
相关产品推荐
相关产品推荐

