sed 如何匹配模式删除行加一行并插入不同的文件

sed 如何匹配模式删除行加一行并插入不同的文件

我相信我已经很接近了,但是缺少 1 个命令。

我有 file1.txt

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
id="8" efwef
aaaaaaaaaaaaaaaaaaa
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

文件2.txt

123

123

我需要的是:

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

解释: 找到模式(id =“8”) 删除模式行+1 插入到file1.txt中 file2.txt的内容

我得到了这个 sed 命令

sed -e '/id="8"/,+1{' -e 'r /tmp/file2.txt' -e 'd' -e '}' -i /tmp/file1.txt

它满足了我的所有需要​​...除了它插入了两次file2.txt......

可能是因为,+1我试了好几种组合都没能成功

答案1

不要尝试通过地址范围指定下一行,而是尝试使用N将其拉入以下之前的模式空间d

$ sed -e '/id="8"/{r file2.txt' -e 'N;d;}' file1.txt
rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

相关内容