我相信我已经很接近了,但是缺少 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