複数の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-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}
これはあなたのために働くかもしれません(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
個人的には、これは非常に難しいと思います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