Linux

perl one liner + 如何替換任何最後一個 IP 地址八位字節

  • June 18, 2013

如何將任何最後一個 IP 地址八位字節(四個八位字節)替換為 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

OP最初提出了一個不同的問題。以下有 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`) 後跟零。

樣本文件

這是我使用的範例文件。OP 發布了一個文件,其中包含一些尾隨空格等,這將不允許 Perl 單行器在不添加額外程式碼的情況下工作,這似乎不相關。

# 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

第二種解決方案

$ 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 

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