2013-07-18 104 views
0

我有一種情況,我想用sed替換文件中的多行文本。 搜索文本是:用sed替換多行

Enable=Yes 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress= 
SubnetMask= 
DefaultGateway= 

而且要替換的文字是

Enable=No 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress=0.0.0.0 
SubnetMask=255.255.255.0 
DefaultGateway=1.1.1.1 

任何幫助將不勝感激。

+2

基本sed的替換命令'的sed的/輸入/輸出/ G'file'。嘗試一下,以便我們可以幫助解決您可能遇到的問題。 – fedorqui

+1

另一個選擇(如果它符合您的要求)是,您從您的文件中刪除整個塊,然後讀取替換文件的文件內容。與'r'。也就是說,不是換行,而是換塊。無論如何,弄髒你的手是第一步。 – Kent

+0

但是,文本如何在其中添加新行。如何在輸入和輸出中放入新行符號,以此作爲輸入無效Enable = Yes \ nUseStatic =否\ nUseTempS =否\ nUseStaticWINS =否\ nIPAddress = \ nSubnetMask = \ nDefaultGateway = – Jimmy

回答

-1
cat yourfile.txt | sed -f zarmacimamadzaghli.sed 

zarmacimamadzaghli.sed

s/Enable=Yes/Enable=No/ 
s/UseTest=No/UseTest=No/ 
s/UseTempS=No/UseTempS=No/ 
s/UseStatic=No/UseStatic=No/ 
s/IPAddress=/IPAddress=0.0.0.0/ 
s/SubnetMask=/SubnetMask=255.255.255.0/ 
s/DefaultGateway=/DefaultGateway=1.1.1.1/ 
+0

對不起,我最後的評論。在許多文件中更改相同的文本是有用的。它可以通過分組縮短,但很好。 – Birei

+0

@Birei那麼,爲幾個文件做這件事有什麼問題? –

+0

完全沒問題。我的第一個想法是OP只想做一次,所以忘記了刪除的評論。 – Birei

0

如果你想爲了配合這些領域,在您閱讀,一個可移植的方式:

sed -e '/Enable=Yes/!b;N; 
    /UseTest=No/!b;N;  
    /UseTempS=No/!b;N;  
    /UseStatic=No$/!b;N; 
    /IPAddress=$/!b;N;  
    /SubnetMask=$/!b;N; 
    /DefaultGateway=$/!b; 
    s/.*//;rtemplate' input 

模板

Enable=No 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress=0.0.0.0 
SubnetMask=255.255.255.0 
DefaultGateway=1.1.1.1 
+0

什麼是模板? – Jimmy

+0

這是一個包含替換文字的文件 – perreal

4

代碼GNU

sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1 

會話協議:

 
$ cat file1 
Enable=Yes 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress= 
SubnetMask= 
DefaultGateway= 

$ cat file2 
Enable=No 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress=0.0.0.0 
SubnetMask=255.255.255.0 
DefaultGateway=1.1.1.1 

$ sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1 
Enable=No 
UseTest=No 
UseTempS=No 
UseStatic=No 
IPAddress=0.0.0.0 
SubnetMask=255.255.255.0 
DefaultGateway=1.1.1.1 
+1

哇......你當然有風格,先生。 –