2013-02-11 136 views
1

我正在建立一個.sed文件來啓動腳本安裝多個Apache服務器。我試圖讓sed匹配.conf文件中的默認網站管理員電子郵件地址,該文件與此egrep非常相稱。然而,當我使用sed來嘗試替代搜索和替換時,我不會返回任何錯誤,但它也不會進行任何替換。我通過再次運行相同的egrep命令來測試它。SED命令匹配正則表達式,但不能替代

egrep -o '\b[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b' /home/test/httpd.conf 

回報

[email protected] 
[email protected] 
[email protected] 

我試圖用sed命令是

sed -i '/ServerAdmin/ s/\b[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b/[email protected]/g' /home/test/httpd.conf 

運行我試圖通過再次運行egrep的驗證結果後,它返回相同3個電子郵件地址表示沒有被替換。

+0

我不得不使這個擴展的正則表達式,它現在取代了除地址之外的所有地址。它錯過了「[email protected]」 更新:可能是因爲它沒有在@ – 2013-02-11 00:39:34

+1

是你的'admin @ your-domain.com'在conf文件中的'ServerAdmin'之後的區域中尋找「 - 」? – Kent 2013-02-11 00:46:34

+1

不知道,我一直在與這個戰鬥,忘了甚至檢查。猜我已經回答了我自己的問題,然後與它需要擴展正則表達式 – 2013-02-11 00:58:54

回答

0

必須告訴sed,它需要使用-r選項使用擴展正則表達式,然後按如下方式生成sed命令。

sed -ir '/ServerAdmin/ s/\b[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b/[email protected]/g' /home/test/httpd.conf 

很大程度上得益於Kent的指出這是缺少wasnt地址之後的ServerName

1

不要假設任何兩個工具使用相同的正則表達式語法。如果您打算使用sed替換,請使用sed進行測試 - 而不是egrep。使用sed很容易,就好像它是一個grep命令:sed -ne '/pattern/p'

+0

我只是想讓你知道,我已經回來閱讀這個語法至少六十倍。其中一天,我會記住它,它將是無價的 – 2013-04-01 22:52:57