使用BASH脚本在文本文件中的现有文本块之后附加新文本的最佳解决方案是什么?
例如,我有一个包含以下内容的配置文件:
[setting1]
...
[setting2]
...
[setting3]
我想在[setting2]
之后添加一些文字,例如:
test1=data
test2=data
test3=data
因此,我想在脚本运行后看起来像这样:
[setting1]
...
[setting2]
test1=data
test2=data
test3=data
...
[setting3]
答案 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