不包括某些IP的IP范围的bash-for循环

不包括某些IP的IP范围的bash-for循环,bash,for-loop,ip,ip-address,Bash,For Loop,Ip,Ip Address,我有下面的循环 for ip in 10.11.{32..47}.{0..255} do echo "<ip>${ip}</ip>" done 试试这个: printf "%s\n" 10.11.{32..47}.{0..255} 10.11.{32..35}.{39..61} | sort | uniq -u | while read ip; do echo $ip; done for ip in 10.11.{32..47}.{0..255} d

我有下面的循环

for ip in 10.11.{32..47}.{0..255}
do
        echo "<ip>${ip}</ip>" 
done
试试这个:

printf "%s\n" 10.11.{32..47}.{0..255} 10.11.{32..35}.{39..61} | sort | uniq -u | while read ip; do echo $ip; done
for ip in 10.11.{32..47}.{0..255}
do
        echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
        echo "<ip>${ip}</ip>" 
done
试试这个:

printf "%s\n" 10.11.{32..47}.{0..255} 10.11.{32..35}.{39..61} | sort | uniq -u | while read ip; do echo $ip; done
for ip in 10.11.{32..47}.{0..255}
do
        echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
        echo "<ip>${ip}</ip>" 
done

你是在问是否可以让大括号扩展为你做这件事,还是在问如何在循环中编写逻辑来排除这些范围?遗憾的是,这并没有消除任何东西。您可以试试这样的方法:
。|sort | uniq-c | awk'$1=1{print$2}'|…
@SatoKatsura:无法在bash版本4.3.11中复制此内容
printf
创建4188行并
排序| uniq-u
将其减少到4004行。还不知道
uniq
的选项
-u
。谢谢你的提示!赛勒斯,你的解决方案也很棒。只是在排序时修改了你的,那将是完美的。printf“%s\n”10.11.{32..47}.{0..255}10.11.{32..35}.{39..61}排序-t-读ip时k1,1n-k2,2n-k3,3n-k4,4n | uniq-u |;不要重复$ip;done@spacemtn5:谢谢你的提示。这是伟大的Alfe,但我们仍在循环通过ip范围10.11.{32..35}.{39..61}(我们想排除),但不打印输出。如果我错了,请纠正我。我计划在“for循环”中添加一个“if条件”,以排除ip范围10.11.{32..35}.{39..61}。我有一堆其他命令要包含在for循环中,而不仅仅是echo。我计划通过不达到这个ip范围来节省时间,只是不打印输出不会有帮助。通常,在这些循环中执行任何操作都会比循环本身花费更多的时间,但我明白你的意思,并将尽我所能解决这个问题。请继续关注。添加了更多版本。阿尔夫,谢谢你,先生。这看起来很棒,但您提到原点将不再可见。你说的是哪一个来源?你是对的,这还不清楚。我在那里重新表述了答案,以便更详细、更清楚地解释我的意思。
# ranges below result in
# 10.11.{32..47}.{0..255} without 10.11.{32..35}.{39..61}:
for ip in 10.11.{32..35}.{{0..38},{62..255}} 10.11.{36..47}.{0..255}
do
        echo "${ip}" 
done