2013-07-18 105 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

哇......你当然有风格,先生。 –