如何使用BASH将新文本附加到文件中的特定文本?

时间:2010-09-02 23:01:59

标签: bash

使用BASH脚本在文本文件中的现有文本块之后附加新文本的最佳解决方案是什么?

例如,我有一个包含以下内容的配置文件:

[setting1]

...

[setting2]

...

[setting3]

我想在[setting2]之后添加一些文字,例如:

test1=data
test2=data
test3=data

因此,我想在脚本运行后看起来像这样:

[setting1]

...

[setting2]
test1=data
test2=data
test3=data
...

[setting3]

4 个答案:

答案 0 :(得分:4)

您可以使用sed执行此操作:

$ sed -e '/^\[setting2\]$/a\
test1=data\
test2=data\
test3=data' yourfile > yourfile.new

(注意\个字符后面的新行)。

...或使用-i标志来就地修改文件:

$ sed -i -e '/^\[setting2\]$/a\
test1=data\
test2=data\
test3=data' yourfile

答案 1 :(得分:2)

一种方法是:

sed -e '/^\[setting2]/a\
test1=data\
test2=data\
test3=data' $file > new.$file
mv new.$file $file

使用GNU sed,可以使用'-i'选项进行“就地”编辑 - 这样可以节省写入新文件并将新文件移到旧文件上的过程。

答案 2 :(得分:0)

你可以只用shell来做。基本思路是搜索模式,找到时,打印出当前行和3个新行

exec 4<"file"
while read -r line
do
   case "$line" in
    *setting2*)
      echo "$line"
      printf "test1=data\ntest2=data\ntest3=data\n"
   esac
done >t
exec 4<&-
mv t file

另外,使用awk

awk '/setting2/{$0=$0"\ntest1=data\ntest2=data\ntest3=data"}1' file

答案 3 :(得分:0)

使用ed(1):

lines='test1=data
test2=data
test3=data'

printf '%s\n' H '/\[setting2\]/a' "$lines" . wq | ed -s testfile.txt