我想編寫一個腳本來選擇某種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根本沒有選擇任何東西。
我想編寫一個腳本來選擇某種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根本沒有選擇任何東西。
我想你想要的是:
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
什麼是輸入,什麼是輸出?舉例說明。 – kabanus
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
爲什麼'10.158.33.4'錯過了你的輸出(如153 + 5給出158)? – RomanPerekhrest