如何使用sed将两个模式间的多行内容替换为指定文件内容?
嘿,这个文本替换需求用sed就能轻松搞定,我给你详细说说怎么做:
核心命令实现
直接用这条sed命令就能完成替换,它会精准定位begin到end的内容块(包含这两个标记行),并替换成file2.txt里的内容:
sed -e '/^begin$/,/^end$/{/^begin$/{r file2.txt' -e '};d}' file1.txt
命令逻辑拆解
我给你拆解开每个部分的作用,方便你理解:
/^begin$/,/^end$/:精准匹配从**单独一行的begin到单独一行的end**的内容范围,避免误匹配那些包含begin/end字样的其他行/^begin$/{r file2.txt' -e '}:当匹配到begin行时,读取file2.txt的全部内容插入到这个位置d:删除整个begin到end范围内的所有行(包括begin和end本身)
原地修改文件(直接更新file1.txt)
如果想直接修改原文件而不是只输出结果,加上-i参数即可:
- Linux 环境:
sed -i -e '/^begin$/,/^end$/{/^begin$/{r file2.txt' -e '};d}' file1.txt
- macOS 环境:
sed -i '' -e '/^begin$/,/^end$/{/^begin$/{r file2.txt' -e '};d}' file1.txt
效果验证
假设你的file1.txt初始内容是:
some text ... ...
begin
if something is true
some text here ...
fi
end
some text
file2.txt内容是:
while read line:
do some code
done
执行命令后,file1.txt会变成:
some text ... ...
while read line:
do some code
done
some text
完全符合你的需求哦!
内容的提问来源于stack exchange,提问作者kikilinux
相关产品推荐
相关产品推荐

