sedコマンドを使用して日付とIPを含む文字列を置き換える方法

sedコマンドを使用して日付とIPを含む文字列を置き換える方法

IPアドレスと日付を含む次の文字列があります。セキュリティ上の理由から、IPアドレスの最初の2桁を隠す必要があります。

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

おすすめ記事