gpt4 book ai didi

linux - 正则表达式匹配 IP 地址但忽略本地主机

转载 作者:太空狗 更新时间:2023-10-29 11:12:13 24 4
gpt4 key购买 nike

所以我有这个脚本,它使用分配给我的操作系统 (GNU/Linux) 的 IP 执行某些操作,这些 IP 是我通过运行 ifconfig 获得的。它工作正常,但是,我想知道我是否可以在同一个正则表达式中过滤掉环回/本地主机 IP (127.0.0.1)在我的脚本中。]

我的脚本使用的是:

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,这只会让我从历史中抛出一些东西。

我的意思是,我可以在 oneliner 的末尾运行另一个 grep,比如 grep -v "127.0.0.1",但我只是想避免 grep 已经 grep 的东西。我想这并不是说这有什么问题,只是想了解更多信息并提高效率。

最佳答案

只有一个 grep,没有 sed 或 awk:

# ip a|grep -oP "inet \K[0-9.]*(?=.*[^ ][^l][^o]$)"
192.168.1.31
172.16.5.31

关于linux - 正则表达式匹配 IP 地址但忽略本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47184213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com