使用sed修改Apache端口文件

时间:2016-07-22 10:14:59

标签: regex apache sed

我正在尝试使用sed。

编辑ports.conf文件中的Listen 80

由于该文件如下:

Listen 80

<IfModule ssl_module>
    Listen 443
</IfModule>

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

使用此命令: head -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 / Listen 8080 file

cat文件 - &gt;

 Listen 8080

    <IfModule ssl_module>
        Listen 443
    </IfModule>

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

怎么做?

2 个答案:

答案 0 :(得分:2)

如果您使用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 :(得分:1)

可以使用标准sed完成:

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