我想写一个能够选择某种IP地址的脚本
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 :(得分: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
编辑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
答案 1 :(得分:0)
您可以使用
grep -Eo "^[0-9]{1,3}[.] $((sum + i))[.][0-9]{1,3}[.][0-9]{1,3}" filename
要点:
$((sum + i))
在Bash中实际执行加法。请参见online demo:
sum=152;
s="152. 152.012.123
153. 153.123.123";
grep -Eo "^[0-9]{1,3}[.] $((sum + i))[.][0-9]{1,3}[.][0-9]{1,3}" <<< "$s"
# => 153. 153.123.123