簡體   English   中英

使用sed使用正則表達式替換IP

[英]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

我想念什么嗎?

這里有兩個問題:

  • sed不喜歡PCRE digit屬性\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM