如何使用sed用文件内容替换两个模式之间的多行?

kik*_*nux 2 sed substitution paragraph

假设我在文件
file1.txt 中有以下内容:

some text ...
...    
begin  
    if somthing is true  
       some text here  
       ...  
    fi 
end  
some text
Run Code Online (Sandbox Code Playgroud)

我想用另一个文件
file2.txt 的内容替换开始结束之间的文本,包括开始结束:

while read line:  
do  
   some code
done
Run Code Online (Sandbox Code Playgroud)

替换后,file1.txt 应该是这样的
file1.txt:

some text ...
...    
while read line:  
do  
   some code
done
some text
Run Code Online (Sandbox Code Playgroud)

cta*_*ac_ 5

你可以试试这个 sed

sed -e '/begin/,/end/!b' -e '/end/!d;r file2.txt' -e 'd' file1.txt
Run Code Online (Sandbox Code Playgroud)

如果未指定选项 -n,则 sed 打印文件的每一行。
在打印之前,sed 执行所有给定的 -e 选项给出的脚本。
脚本中的命令 b 告诉 sed 在此时结束脚本。
所以第一个 -e 命令告诉 sed 结束脚本并打印所有不在开始和结束中的行。
第二个 -e 命令告诉 sed 在找到带有 end 的行时打印文件 file2.txt。
第三个 -e 命令告诉 sed 删除(不打印)从头到尾的行。