最後のIPアドレスオクテット(4オクテット)を0に置き換える方法
注:Linuxシステムでは、Perlによって線形に実装する必要があります。
例えば
192.9.200.124 will replaced to 192.9.200.0
完全な例:
変更前のIPアドレス:
more file
10.140.4.10 10.140.4.10
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.11 10.140.4.11
45.0.0 45.0.0
10.219.39.188 10.219.39.188
10.219.39.189 10.219.39.189
10.140.4.12 10.140.4.12
10.219.39.138 10.219.39.138
10.219.39.139 10.219.39.139
予想結果(IPアドレス変更)
more file
10.140.4.0 10.140.4.0
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.0 10.140.4.0
45.0.0 45.0.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
10.140.4.0 10.140.4.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
答え1
OPはもともと別の質問をしました。 2つの質問に答える2つの解決策が以下にありますが、似ていますが少し異なります。
最初のソリューション
これにより、目的のタスクが実行されます。
$ perl -pe 's/^((\d{1,3}\.){3})\d+$/${1}0/' sample.txt
10.140.4.0
192.9.201
44.44.44
100.100.1
10.140.4.0
45.0.0
10.219.39.0
10.219.39.0
10.140.4.0
10.219.39.0
10.219.39.0
説明する
このビットは、(\d{1,3}\.){3}
ピリオドが続く一連の数字(3)(1〜3桁の長さ)を探します。この値は一時変数($ 1)に保存されます。文字列の周りの括弧には(\d{1,3}\.){3}). This sequence is then only matched if it's followed by a 4th octet (the 2nd \d+). All of this is then replaced with the first sequence (saved to
$1`) と 0 が付きます。
サンプルファイル
以下は私が使用するサンプルファイルです。 OPは、Perlの1行のコードが追加のコードを追加せずに動作することを許可しない末尾のスペースなどを含むファイルを公開しましたが、これは関係がないようです。
# sample.txt
10.140.4.10
192.9.201
44.44.44
100.100.1
10.140.4.11
45.0.0
10.219.39.188
10.219.39.189
10.140.4.12
10.219.39.138
10.219.39.139
2番目の解決策
$ perl -pe 's/^((\d{1,3}\.){3})\d+\s+((\d{1,3}\.){3})\d+/${1}0 ${3}0/'
10.140.4.0 10.140.4.0
192.9.201 192.9.201
44.44.44 44.44.44
100.100.1 100.100.1
10.140.4.0 10.140.4.0
45.0.0 45.0.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
10.140.4.0 10.140.4.0
10.219.39.0 10.219.39.0
10.219.39.0 10.219.39.0
答え2
perl -i -pe 's/(\d+\.){3}\K\d+/0/g' file
これは\K
LookBehindアサーションのように機能しますが、可変長パターンを受け入れます。
答え3
sed
タグにあるので、答えは次のとおりですsed
。
sed '/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/s/\.[0-9]\+$/.0/'
答え4
1つの方法は次のとおりです。
perl -lpe 's/\d+$/0/' filename
ファイルの末尾に空白行を追加する必要があります。