如何正常编辑bash脚本中的文件

时间:2016-06-02 09:26:18

标签: bash

我有一个文本文件,其中包含一些指定的字符串,首先找到它们,删除它们之间的几行,然后添加一些新的东西。 .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

2 个答案:

答案 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