Shell-sed如何替换文件中的多行内容?
想用文件B中20到30行之间的内容覆盖替换掉文件A中50到60行的内容,sed可不可以很简单的一次性做到这一点啊,多谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
想用文件B中20到30行之间的内容覆盖替换掉文件A中50到60行的内容,sed可不可以很简单的一次性做到这一点啊,多谢。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
两次sed就可以了吧。比如:
sed "3s/.*/`sed -n "4p" a.txt`/" b.txt
用awk吧
1.txt
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb
ccccccccccccccc
ddddddddddddddd
eeeeeeeeeeeeeee
fffffffffffffff
ggggggggggggggg
2.txt
zzzzzzzzzzzzzzzzzzzz
yyyyyyyyyyyyyyyyyyyy
xxxxxxxxxxxxxxxxxxxx
wwwwwwwwwwwwwwwwwwww
vvvvvvvvvvvvvvvvvvvv
uuuuuuuuuuuuuuuuuuuu
要求将c和d替换成wv
首先先获取1.txt的c和d的内容,c和d分别是3和4,首先要获取1.txt的3和4行的内容
用awk实现就是
awk 'NR==FNR && FNR >= 3 && FNR <= 4 {print $0}' 1.txt
下面同样的道理可以找到w和v,分别是2.txt的第4行和第5行
awk 'NR==FNR && FNR >= 4 && FNR <= 5 {print $0}' 2.txt
结合上面的内容,然后加上临时变量,我们就可以生成3.txt(你如果想源文件改的话,直接写到2.txt)了
awk 'NR==FNR&&FNR>=3&&FNR<=4{t[FNR-3]=$0;}NR>FNR{if(FNR>=4&&FNR<=5){print t[FNR-4];}else{print $0;}}' 1.txt 2.txt > 3.txt
最后看下3.txt
zzzzzzzzzzzzzzzzzzzz
yyyyyyyyyyyyyyyyyyyy
xxxxxxxxxxxxxxxxxxxx
ccccccccccccccc
ddddddddddddddd
uuuuuuuuuuuuuuuuuuuu