2017-01-05 58 views
0

Im自動化部署過程,我需要一個工具來替換部分文件。我需要更換的部分是這樣的:使用sed替換多行嵌套數組與文件的內容

Vari = { 
... 
} 

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

就像你所看到的,它是一個嵌套的數組(但我知道,只會有1個嵌套數組)。我有代碼替換名爲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) 

所以......我想如果有人可以糾正我的腳本與另一個文件的內容替換匹配(稱爲FILETOREPLACE.txt)

回答

1

像這樣的東西可能會做:

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

第一statemen t一旦找到REPLACEME,就立即將文件FILETOREPLACE.txt的內容插入到流中,第二條語句只是刪除從REPLACEME到該塊結尾的所有內容。請注意,我已經簡化了刪除操作,假定該塊以結束括號開頭的第一行結束。

+0

它的工作!謝謝!你能解釋這個sed是如何工作的嗎? – megavexus