2015-01-10 61 views
1

我試圖用sed來替換一個IP地址。任何援助將不勝感激。Sed更換IP地址

在test.1文件中的字符串是:

o=Acc1111 3415 1536 IN IP4 10.201.25.173. 

我想只有10.201.25.173.127.0.0.1.

期望的最終的字符串應該是取代:

o=Acc1111 3415 1536 IN IP4 127.0.0.1. 

我的sed定期表達是:

sed 's/o=.*IN IP4.*/*IN IP4 127.0.0.1./' test.1 

但是用IN IP4 127.0.0.1.代替了所有的字符串。

我需要在一個內襯正則表達式中的命令。這可能嗎?

回答

4

使用捕獲組和反向引用複製行成替換的開始,並與127.0.0.1

sed 's/\(o=.*IN IP4 \).*/\1127.0.0.1./' test.1 

\(...\)創建一個捕獲組更換IP。在替換\1被替換爲與第一個捕獲組匹配的輸入部分,\2獲取第二個捕獲組,等等。

+0

嗨Barmar,謝謝。但我找到了一個通用的解決方案。該特定IP可以是任何其他IP。我想覆蓋任何給定的IP –

+0

請參閱最新的答案。 – Barmar

+0

哇,這很快! :) 謝謝。 你能解釋語法嗎? –

2

一個更簡單的解決方案是使用awk並只是替換最後一個字段。

awk '/IN IP4/ {$NF="127.0.0.1."}1' file 
o=Acc1111 3415 1536 IN IP4 127.0.0.1. 

該更換IP,以127.0.0.1.的所有線絲毫文字IN IP4