2016-07-22 78 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