我有一个文本文件,其中包含一些指定的字符串,首先找到它们,删除它们之间的几行,然后添加一些新的东西。 .e.g
$cat foo.txt
aaaaaa
bbbbbb
####start
123456
987655
121212
####end
cccccc
dddddd
$ cat bar.txt
AA
BB
CC
现在,我想要一个bash脚本来编辑foo.txt。删除“#### start”和“#### end”之间的内容,插入bar.txt的内容
新的foo.txt将是
$cat foo.txt
aaaaaa
bbbbbb
####start
AA
BB
CC
####end
cccccc
dddddd
答案 0 :(得分:2)
我们可以执行以下命令,
sed -i '/####start/,/####end/{//!d};/####start/r bar.txt' foo.txt
第一部分“/ #### start /,/ #### end / {//!d}”是删除模式和第二部分之间的行“/ #### start / r bar.txt“是将bar.txt的内容添加到foo.txt。
**Test:**
✓ krishna-VB# cat foo.txt
aaaaa
bbbbbb
####start
123465
454687
146546
####end
cccccc
dddddd
✓ krishna-VB# cat bar.txt
AA
BB
CC
✓ krishna-VB# sed -i '/####start/,/####end/{//!d};/####start/r bar.txt' foo.txt
✓ krishna-VB# cat foo.txt
aaaaa
bbbbbb
####start
AA
BB
CC
####end
cccccc
dddddd
如果要在修改文件之前验证刚输出,可以在sed之前删除'-i'选项。
答案 1 :(得分:1)
这个awk单行应该有所帮助:
awk 'NR==FNR{a[NR]=$0;n=NR;next}
!p;/##start/{p=1;for(i=1;i<=n;i++)print a[i];}/#end/{p=0;print}' bar foo