我有一個包含多個IP的字符串。我需要使用sed將所有IP中的所有數字替換爲字母'X',即10.135.1.03
將變爲XX.XXX.X.XX
。使用sed替換IP地址的數字(保留字符數)
UPDATE字符串不僅包含IP,還包含其他字符:字母和數字。只需要替換IP的數字。例如「從192.168.1.1接收到5個連接,從10.0.0.1接收到26個連接,總計31 - 2012年9月20日星期二。MessageID:212.132.15」。
我有一個包含多個IP的字符串。我需要使用sed將所有IP中的所有數字替換爲字母'X',即10.135.1.03
將變爲XX.XXX.X.XX
。使用sed替換IP地址的數字(保留字符數)
UPDATE字符串不僅包含IP,還包含其他字符:字母和數字。只需要替換IP的數字。例如「從192.168.1.1接收到5個連接,從10.0.0.1接收到26個連接,總計31 - 2012年9月20日星期二。MessageID:212.132.15」。
$ str="10.135.1.03"
$ echo $str | sed -e "s/[0-9]/X/g"
XX.XXX.X.XX
或腳本背景下,這可能是更好:
out=$(sed -e "s/[0-9]/X/g" <<< "$str")
不知道你爲什麼想sed
順便說一句,tr
有一個稍微清晰的語法:
out=$(tr [:digit:] X <<< "$str")
使用bash時,更清潔:
out=${str//[0-9]/X}
就個人而言,我會發現sed
非常困難。我認爲這將是與GNU awk
容易得多:
awk --re-interval '{ for (i=1; i<=NF; i++) if ($i ~ /([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}/) gsub(/[[:digit:]]/, "X", $i) }1' file.txt
結果:
Received 5 connections from XXX.XXX.X.X, 26 connections from XX.X.X.X, total 31 - Tuesday, 20.09.2012. MessageID: 212.132.15
這可能會爲你(GNU的sed,TR和Bash)工作:
sed -r 's/\<[0-9]{1,3}(\.[0-9]{1,3}){3}\>/$(tr [0-9] X <<<&)/g;s/.*/echo &/e' file
你能欺騙並做:
sed -r 's/\<[0-9]{1,3}(\.[0-9]{1,3}){3}\>/X.X.X.X/g' file
不幸的是我的字符串連續除了IP之外,還有其他的字符:字母和數字。只需要替換IP的數字。 –
@JohnDoe,是否有迫切需要用一個X替換每個字符,還是我們可以用X替換123,使所有IP的X.X.X.X? – mvds
是的,我們需要保留字符的數量,一個數字一個X. –