假設一個簡單的文本文件來替換IP:使用SED使用正則表達式
123.123.123.123
我想與222.222.222.222
更換IP它裏面。我曾嘗試以下,但沒有什麼變化,但是相同的正則表達式似乎工作in this Regexr
sed -i '' 's/(\d{1,3}\.){3}\d{1,3}/222.222.222.222/' file.txt
我缺少的東西?
假設一個簡單的文本文件來替換IP:使用SED使用正則表達式
123.123.123.123
我想與222.222.222.222
更換IP它裏面。我曾嘗試以下,但沒有什麼變化,但是相同的正則表達式似乎工作in this Regexr
sed -i '' 's/(\d{1,3}\.){3}\d{1,3}/222.222.222.222/' file.txt
我缺少的東西?
兩個問題在這裏:
\d
,使用範圍:[0-9]
或POSIX [[:digit:]]
-r
標誌擴展的正則表達式爲好。這應該工作:
s='123.123.123.123'
sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}/222.222.222.222/' <<< "$s"
222.222.222.222
更好的辦法是使用錨避免匹配意外輸入:
sed -r 's/^([0-9]{1,3}\.){3}[0-9]{1,3}$/222.222.222.222/' <<< "$s"
PS:在OSX使用-E
代替-r
:
sed -E 's/^([0-9]{1,3}\.){3}[0-9]{1,3}$/222.222.222.222/' <<< "$s"
222.222.222.222
我可以用整數範圍替換'\ d',但OSX sed似乎沒有'-r'作爲標誌 – railsuser400 2014-11-24 16:14:24
爲OSX增加了一個選項,即使用'-E' – anubhava 2014-11-24 16:15:42
很好。這樣可行。將在9米接受 – railsuser400 2014-11-24 16:16:46
您最好使用-r
,如anubhava所示。
但是如果你沒有它,你必須逃避每一個(
,)
, {
和}
。而且,使用[0-9]
代替\d
:
$ sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/222.222.222.222/' <<< "123.123.123.123"
222.222.222.222
嘗試添加/ g標誌 – nacholibre 2014-11-24 16:11:55
沒什麼區別。但我不明白爲什麼全局標誌會在裸露的文件中改變一個IP地址:/ – railsuser400 2014-11-24 16:13:08
BSD sed不支持'\ d'。使用POSIX字符類。 – 2014-11-24 16:13:15