Shell-sed如何替换文件中的多行内容?

发布于 2016-10-13 04:34:25 字数 67 浏览 1434 评论 2

想用文件B中20到30行之间的内容覆盖替换掉文件A中50到60行的内容,sed可不可以很简单的一次性做到这一点啊,多谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-07-26 20:59:05

两次sed就可以了吧。比如:

 sed "3s/.*/`sed -n "4p" a.txt`/" b.txt

偏爱自由 2016-10-16 21:04:04

用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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文