2017-01-05 11 views
0

私はデプロイメントプロセスを自動化しています。ファイルの一部を置き換えるツールが必要です。あなたが見ることができるように、そのネストされた配列(しかし、私はそれが唯一の1つのネストされた配列を持っていることを知っている)sedを使用して複数行のネストされた配列をファイルの内容で置き換える

Vari = { 
... 
} 

REPLACEME = { 
    'default' = { 
     ... 
    } 
} 
... 

:私は交換する必要がある部分は、このようなものです。私はFILETOREPLACE.txtという名前のファイルで配列を置き換えるコードを持っており、構造体REPLACEMEをそのファイルの内容で置き換える必要があります。

sedでは、私は構造体を探し出す(それを削除する)スクリプトを取得しますが、ファイルの内容と置き換えることはできません。 sedスクリプトは次です:

sed '/REPLACEME = {/{:1; /}/!{N; b1}; N; :2; /}/!{N; b2};//d};' settings.py 

このsedスクリプトは、この作る:

'/REPLACEME = {/{  -> It matchs the begining of the array 
    :1;    -> Tag to the parents array 
    /}/!{    -> If it's not a closing curl brace 
     N;    -> Read next 
     b1    -> Go back to :1; 
    }; 
    N;     -> If its the closing curl braces, continue 
    :2;    -> Next tag 
    /}/!{    -> Again... continue until it finds a closing curl brace 
     N;    -> ... 
     b2    -> ... 
    }; 
//d};     -> This deletes the buffer (I have not been able to replace it) 

だから、誰もが別のファイルの内容と一致するものを置き換えるために私のスクリプトを修正することができれば...私が希望します

sed '/REPLACEME/rFILETOREPLACE.txt 
    /REPLACEME/,/^\}/d' sed.in 

最初statemen:このような

答えて

1

何かするかもしれない(FILETOREPLACE.txtと呼ばれます) t REPLACEMEが見つかるとすぐにファイルFILETOREPLACE.txtの内容をストリームに挿入し、2番目のステートメントはすべてをREPLACEMEからそのブロックの最後まで削除します。ブロックが閉じ括弧で始まる最初の行で終了すると仮定して、削除を簡略化しました。

+0

これは機能しました。ありがとう!このsedがどう働くのか説明できますか? – megavexus

関連する問題