使用sed(保留字符编号)用“X”字母替换IP地址数字

时间:2012-09-19 22:21:19

标签: regex sed

我有一个包含多个IP的字符串。我需要使用sed将所有IP中的所有数字替换为字母“X”,即10.135.1.03将变为XX.XXX.X.XX

UPDATE 字符串不仅包含IP,还包含其他字符:字母和数字。需要仅替换IP的数字。类似于“收到来自192.168.1.1的5个连接,来自10.0.0.1的26个连接,总共31个 - 星期二,20.09.2012。消息ID:212.132.15”。

3 个答案:

答案 0 :(得分:3)

$ 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 btw,tr语法稍微清晰一点:

out=$(tr [:digit:] X <<< "$str")

使用bash时,甚至更干净:

out=${str//[0-9]/X}

答案 1 :(得分:1)

就个人而言,我会发现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

答案 2 :(得分:1)

这可能对你有用(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