【发布时间】:2017-11-08 15:59:21
【问题描述】:
所以我有这个脚本,它对分配给我的操作系统 (GNU/Linux) 的 IP 执行某些操作,这些 IP 是通过运行 ifconfig 获得的。它工作正常,但是,我想知道是否可以在同一个正则表达式中过滤掉环回/本地主机 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 的东西。并不是说这有什么问题,我想只是想了解更多并提高效率。
【问题讨论】:
标签: linux bash awk grep regex-negation