如何使用 shell 脚本检查文件中是否存在 IP 地址?

如何使用 shell 脚本检查文件中是否存在 IP 地址?

我有一个生成一些输出的脚本。我想检查任何 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}'

相关内容