[英]Using sed to replace IP using regex
假設一個簡單的文本文件:
123.123.123.123
我想用222.222.222.222
替換其中的IP。 我已經嘗試了以下內容,但沒有任何變化,但是相同的正則表達式似乎可以在此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
如anubhava所示,最好使用-r
。
但是,如果沒有,就必須轉義每個(
, )
, {
和}
。 而且,使用[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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.