Perl oneliner +最後のIPアドレスオクテットを置き換える方法

Perl oneliner +最後のIPアドレスオクテットを置き換える方法

最後の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 

おすすめ記事