1

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

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

4

3 回答 3

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顺便说一句,tr语法稍微干净一些:

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

使用 bash 时,甚至更清洁:

out=${str//[0-9]/X}
于 2012-09-19T22:23:00.870 回答
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
于 2012-09-20T05:49:54.370 回答
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
于 2012-09-20T00:09:09.373 回答