Sed
如何用 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
。
該
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