Sed

如何用 sed 命令替換包含日期和 IP 的字元串

  • May 28, 2022

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

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

引用自:https://unix.stackexchange.com/questions/704033