2010-09-02 79 views
1

使用BASH腳本在文本文件中的現有文本塊之後追加新文本的最佳解決方案是什麼?如何使用BASH將新文本追加到文件中的特定文本?

例如,我有以下的配置文件:

[setting1] 

... 

[setting2] 

... 

[setting3] 

我想[setting2]後添加一些文字,如:

test1=data 
test2=data 
test3=data 

因此,我希望它看起來像這樣腳本運行後:

[setting1] 

... 

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

[setting3] 

回答

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 
+0

與我寫的非常相似;也許至少我們中的一個是正確的! – 2010-09-02 23:26:13

2

單程是:

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

在GNU sed中,有一個'-i'選項可以進行'in-place'編輯 - 這樣不必寫入新文件並將新文件移動到舊文件上。

0

,你可以只用貝殼做。其基本思路是,以搜索模式,當發現打印出當前行,你的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 
0

使用ED(1):

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

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