1

複数の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」のようなもの。

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 に答える