2016-07-22 67 views
0

我试图在ports.conf文件中编辑Listen 80 sed。使用sed修改Apache端口文件

由于该文件看起来像:

Listen 80 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 

用这个命令: 头-N1 sed_test | sed -i -e's/Listen [0-9] +/Listen 80/1p'sed_test

它会更改文件中的所有'Listen $ port_number'。我想这是因为在第二个命令中我指定了一个文件。

如果我没有指定,它应该写入哪个文件,我得到一个错误 sed: no input files这是合乎逻辑的。

我知道它只能用sed完成,但我不确定如何只编辑一行并将其替换为我的自定义值。

所以这是我想要完成的任务:

SED -i -e some_command /听8080文件

猫文件 - >

Listen 8080 

    <IfModule ssl_module> 
     Listen 443 
    </IfModule> 

    <IfModule mod_gnutls.c> 
     Listen 443 
    </IfModule> 

如何去做?

回答

1

可以是用标准完成sed

sed '/Listen/{s/\([0-9]\+\)/8080/; :a;n; ba}' file 
1

如果您正在使用gnu sed你可以使用:

sed -i '0,/Listen [0-9]*/s//Listen 8080/' file 

Listen 8080 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 

如果没有gnu sed做,那么你可以使用awk仅替换第一个实例:

awk '!p{ p=sub(/Listen [0-9]*/, "Listen 8080") } 1' file 

Listen 8080 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 
+1

这就是我所需要的。 :-) 谢谢! – fugitive

+0

很高兴知道它解决了问题,[您可以点击答案左上角的勾号**标记答案](http://meta.stackexchange.com/a/5235/160242) – anubhava