Linux 如何在另一个文件中查找ip地址列表

Linux 如何在另一个文件中查找ip地址列表,linux,bash,Linux,Bash,我的任务是查看我们是否在公布ip地址列表(3000)。手动操作不是一个好主意,所以我复制了我们在一个文件中公布的所有ip地址。现在,我只需要创建一个bash脚本,并将ip地址列表输入到脚本中,这样它就可以在文件中找到ip地址以及正在播发的ip地址列表。如果找到,请将其保存在一个文件中(如果不在其他文件中)。这就是我目前所拥有的。这个脚本的问题是我必须手动输入每个ip地址。如何向文件提供要搜索的IP地址列表,以及我们正在发布的IP地址列表。非常感谢您的光临 #!/bin/bash while

我的任务是查看我们是否在公布ip地址列表(3000)。手动操作不是一个好主意,所以我复制了我们在一个文件中公布的所有ip地址。现在,我只需要创建一个bash脚本,并将ip地址列表输入到脚本中,这样它就可以在文件中找到ip地址以及正在播发的ip地址列表。如果找到,请将其保存在一个文件中(如果不在其他文件中)。这就是我目前所拥有的。这个脚本的问题是我必须手动输入每个ip地址。如何向文件提供要搜索的IP地址列表,以及我们正在发布的IP地址列表。非常感谢您的光临

 #!/bin/bash

while true; do
  echo -e "IP address: \c"
  read ip

  if grep --color "$ip" "ips"; then
    echo $ip "was found"
    echo $ip >> found
  else
    echo $ip "was NOT found"
    echo $ip >> notFound

  fi

done
$script

这就是您所需要的。

如果您对这两个文件进行排序,可以使用以下命令:

将显示未公布的IP地址,以及:

comm -12 all_ip_addresses_sorted advertised_ip_addresses_sorted
将显示公布的IP地址

还可以通过使用进程替换来避免创建单独的排序文件:

comm -23 <(sort all_ip_addresses) <(sort advertised_ip_addresses)
comm-23更好的脚本:

while read ip  
do  
    grep "$ip"  "$ips" > /dev/null 2>&1 && echo "$ip" >> ip.found || echo "$ip" >> ip.notfound  
done    
将脚本命名为“searchip.sh”
假设您的输入文件是“iplist”,设置变量并按如下方式调用:

ips=ips
cat iplist | sh searchip.sh

sh searchip.sh
然后您会得到两个文件,一个是找到的ip,另一个是找不到的ip。

您需要的是shell I/O重定向

+1:优雅@巴尔马:工艺替代的好地方<是的,我已经用过很多次了。但我不认为有必要回答这个问题。这意味着,如果某个IP只是列表中某个IP的子字符串,则会找到该IP。另外,
grep
有特殊意义,它是一个通配符,这可能会导致虚假匹配。您应该使用
grep-F-x
来匹配整行,而不需要专门处理正则表达式字符。
while read ip  
do  
    grep "$ip"  "$ips" > /dev/null 2>&1 && echo "$ip" >> ip.found || echo "$ip" >> ip.notfound  
done    
ips=ips
cat iplist | sh searchip.sh
sh searchip.sh < iplist