如何使用 sed 命令替换包含日期和 IP 的字符串

如何使用 sed 命令替换包含日期和 IP 的字符串

我有以下字符串,包括 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.whateverIP.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

相关内容