[英]Replace IP address figures with 'X' letters using sed (preserve character number)
我有一個包含多個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
btw, 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.