2017-01-01 40 views
1

我想編寫一個腳本來選擇某種IP地址的使用變量和正則表達式在bash

sum=153 
for i in {1..5}; 
do 
cat filename | egrep -o '^([0-9]{1,3}[.] ${sum + i}[.][0-9]{1,3}[.][0-9]{1,3}' 

文件名中包含某種IP地址的哪個能。輸出需要如下所示:

*.153.*.* 
*.154.*.* 
*.155.*.* 
*.156.*.* 

但是grep根本沒有選擇任何東西。

+0

什麼是輸入,什麼是輸出?舉例說明。 – kabanus

+0

10.150.2.3 10.152.2.5 10.153.2.5.10.155.20.22 10.153.20.23 10.153.30.10 10.158.33.4 10.160.11.20 10.142.20.12 10.142.20.11以及更多..在一列 – Unixer

+0

爲什麼'10.158.33.4'錯過了你的輸出(如153 + 5給出158)? – RomanPerekhrest

回答

0

我想你想要的是:

cut -d"." -f2 inputFile.txt | sort -u | awk '{print "*."$0".*.*"}' 

編輯:

如果我現在給你,然後:

awk -F. '{if ($2 >= 153 && $2 <= 156) print $0}' inFile 

會產生:

10.153.2.5 
10.155.20.22 
10.153.20.23 
10.153.30.10 

爲了在156的最後一位是來自境外使用的變量:

i=6 
awk -F. '{if ($2 >= 153 && $2 <= 15'$i') print $0}' inFile 

EDIT 2

如果現在還不清楚如何將這些成果轉化爲可以遍歷一個列表:

x=$(awk -F. '{if ($2 >= 153 && $2 <= 15'$i') print $0}' inFile) 

,或者你可以遍歷這個立刻道:

for ip in $(awk -F. '{if ($2 >= 153 && $2 <= 15'$i') print $0}' inFile); do 
    //stuff; 
done; 

或純粹的bash:

for ip in $(<Infile); do 
    y=${ip%.*.*}; oct=${y#*.}; 
    if [[ $oct -ge 153 ]] && [[ $oct -le $i ]]; then 
      #Do stuff with $ip! 
    fi 
done 
+0

不,我想選擇ip地址,其中第二個八位字節開始153 154 155反擊$ i – Unixer

+0

@Unixer所以只有IP的匹配\ *。15 [3456 .. $ i]。* *。\ *? '$ i <= 9'? – kabanus

+0

非常感謝它爲我工作 – Unixer