![如何使用 shell 脚本检查文件中是否存在 IP 地址?](https://linux22.com/image/90699/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E4%B8%AD%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我有一个生成一些输出的脚本。我想检查任何 IP 地址的输出,例如
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
是fgrep
个好主意吗?
我有可用的 bash。
答案1
是的,您有很多选项/工具可以使用。我刚刚尝试过这个,它有效:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
所以你可以使用grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
grep 从你的输出中获取 IP 地址。
答案2
如果您的文件被称为例如,ips
您可以编写如下内容:
while read -r ip
do
if [[ $ip == "$1" ]]; then
shift
printf '%s\n' 'action to take if match found'
else
printf '%s\n' 'action to take if match not found'
fi
done < ips
然后您可以按照脚本传递参数
./myscript 159.143.23.12 134.12.178.131 124.143.12.132 124.143.12.132
答案3
根据这个答案开始我的回答:
是的,您有很多选项/工具可以使用。我刚刚尝试过这个,它有效:
如果配置| grep -oE "\b([0-9]{1,3}.){3}[0-9]{1,3}\b" a 所以你可以使用 grep -oE "\b([0- 9]{1,3}.){3}[0-9]{1,3}\b" 从输出中 grep ip 地址。
并将答案转换为全长 IPv6 等...:
fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}\b" -- file
如果你想保留 /nnn(如果它在那里):
fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}(/[0-9]{1,3}){0,1}\b" -- file
还有 IPv6 的缩写版本,其中包含“::”。
有关更多 IPv6 答案,您可以查看此处: https://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
答案4
ip -4 addr show eth1 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'