我有以下字符串,包括 IP 地址和日期。出于某些安全原因,我需要隐藏 IP 地址的前两位数字。
text 200.200.10.2 2022.05.07 15:32:43 other texts
我确实运行了以下命令,但2022.05.07
也被替换了。
echo "text 200.200.10.2 2022.05.07 15:32:43 other texts"|sed -e 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\./IP./g'
text IP.10.2 2IP.07 15:32:43 other texts
我只想更换200.200.10.2
。
答案1
该g
标志的意思是“替换该行中所有出现的字符串”。如果您只想替换第一个出现的位置,只需删除g
:
$ echo "text 200.200.10.2 2022.05.07 15:32:43 other texts" |
sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\./IP./'
text IP.10.2 2022.05.07 15:32:43 other texts
当然,细节取决于您想要做什么。上面的命令也会替换999.999.whatever
为IP.whatever
,所以也许您只想在正好有 4 组数字时才执行此操作:
$ echo "1.2.3 text 200.200.10.2 2022.05.07 15:32:43 other texts" |
sed -E 's/([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3})/IP.\2/'
1.2.3 text IP.10.2 2022.05.07 15:32:43 other texts
但这也匹配1.12.123.1234567890
。因此,您可能只想匹配最后一组数字后跟空格或行尾的情况:
$ echo "1.2.3 text 200.200.10.2 2022.05.07 15:32:43 other texts" |
sed -E 's/([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3}([[:blank:]]|$))/IP./'
1.2.3 text IP. 2022.05.07 15:32:43 other texts