正则表达式匹配 IP 地址但忽略本地主机
Regex to match IP addresses but ignore localhost
所以我有这个脚本,它用分配给我的 OS (GNU/Linux) 的 IP 做一些事情,我从 运行ning ifconfig
获得。它工作正常,但是,我想知道我是否可以在同一个正则表达式中过滤掉 loopback/localhost IP (127.0.0.1) [我假设集群中的每个服务器都说了 IP,我不需要做任何事情在我的脚本中。]
我的脚本使用的是:
ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
我得到的结果如下:
> ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
172.16.0.1
127.0.0.1
我知道这可能是一个愚蠢的问题,但我可以在我的第一个正则表达式中过滤任何以 127 开头的 IP 吗?
我可以尝试将 awk 更改为 grep,例如:
> ifconfig |egrep -o "addr\:(([0-9]{1,3}\.){3}[0-9]{1,3})" |sed -e "s/.*addr\://g"
但是如果我在开始时尝试否定 (?!127),bash 会将其解释为 !127,这只会让我从历史中抛出一些东西。
我的意思是,我可以 运行 在像 grep -v "127.0.0.1"
这样的 oneliner 末尾再进行一次 grep,但我只是想避免对已经 grep 的内容进行 grep。我想这并不是说这有什么问题,只是想了解更多信息并提高效率。
您可以只添加一个子句来匹配 127.0.0.1
并通过添加 next
来排除它,如下所示。这样 Awk
将忽略对包含此模式的行执行任何操作。
.. | awk '/127.0.0.1/{next}/(([0-9]{1,3}\.){3})/{print}' | ..
只有一个没有 sed 或 awk 的 grep:
# ip a|grep -oP "inet \K[0-9.]*(?=.*[^ ][^l][^o]$)"
192.168.1.31
172.16.5.31
所以我有这个脚本,它用分配给我的 OS (GNU/Linux) 的 IP 做一些事情,我从 运行ning ifconfig
获得。它工作正常,但是,我想知道我是否可以在同一个正则表达式中过滤掉 loopback/localhost IP (127.0.0.1) [我假设集群中的每个服务器都说了 IP,我不需要做任何事情在我的脚本中。]
我的脚本使用的是:
ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
我得到的结果如下:
> ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
172.16.0.1
127.0.0.1
我知道这可能是一个愚蠢的问题,但我可以在我的第一个正则表达式中过滤任何以 127 开头的 IP 吗?
我可以尝试将 awk 更改为 grep,例如:
> ifconfig |egrep -o "addr\:(([0-9]{1,3}\.){3}[0-9]{1,3})" |sed -e "s/.*addr\://g"
但是如果我在开始时尝试否定 (?!127),bash 会将其解释为 !127,这只会让我从历史中抛出一些东西。
我的意思是,我可以 运行 在像 grep -v "127.0.0.1"
这样的 oneliner 末尾再进行一次 grep,但我只是想避免对已经 grep 的内容进行 grep。我想这并不是说这有什么问题,只是想了解更多信息并提高效率。
您可以只添加一个子句来匹配 127.0.0.1
并通过添加 next
来排除它,如下所示。这样 Awk
将忽略对包含此模式的行执行任何操作。
.. | awk '/127.0.0.1/{next}/(([0-9]{1,3}\.){3})/{print}' | ..
只有一个没有 sed 或 awk 的 grep:
# ip a|grep -oP "inet \K[0-9.]*(?=.*[^ ][^l][^o]$)"
192.168.1.31
172.16.5.31