2016-06-02 7 views
0

私はいくつかの指定された文字列を含むテキストファイルを持っています。最初にそれらのファイルを探し出し、それらの間にいくつかの行を削除して新しいファイルを追加します。 .e.gbashスクリプトでファイルをうまく編集する方法

$cat foo.txt 
aaaaaa 
bbbbbb 
####start 
123456 
987655 
121212 
####end 
cccccc 
dddddd 


$ cat bar.txt 
AA 
BB 
CC 

今、私はbashスクリプトでfoo.txtを編集します。 「スタート####」と「####終わり」、

新しいfoo.txtのはワンライナーを助けるべき

$cat foo.txt 
aaaaaa 
bbbbbb 
####start 
AA 
BB 
CC 
####end 
cccccc 
dddddd 

答えて

2

我々は、

sed -i '/####start/,/####end/{//!d};/####start/r bar.txt' foo.txt 

最初の部分を次のコマンドを実行することができます "/ #### /、/ ####エンド/を開始{//!D}" を削除することですされる行はtweenパターンと2番目の部分 "/ #### 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 

ファイルの変更前にjust出力を確認する場合は、sedの前に '-i'オプションを削除できます。

+0

興味深いことに、それは非常に簡単です。私は//の使い方を学びたい! {//!d}には、どこでドキュメントを見つけることができますか – redmark

1

このawkになりますbar.txtのコンテンツを挿入間でコンテンツを削除します。

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 
関連する問題