只获取 grep 的第一部分:获取 ifconfig 的 ip


ifconfig | grep -m1 "inet addr" 

给我

inet addr:172.30.1.6  Bcast:172.30.140.255  Mask:255.255.252.0

但是,我只想要ip,这是172.30.1.6。我该怎么做? 请注意,我必须使用 ifconfig,因为这是一个功能有限的嵌入式系统。

拿出你的剪刀,是时候剪了。

echo inet addr:172.30.1.6  Bcast:172.30.140.255  Mask:255.255.252.0 | cut -d : -f 2 | cut -d " " -f 1

一种方法可以做到这一点..

ifconfig | grep -m1 "inet addr" | awk '{print $2}' | awk -F: '{print $2}'

如果您只想获取 IP 地址,则可能有更简单的方法可以使用主机名-i来实现它(参考哪个终端命令只获取 IP 地址而没有其他内容?

由于其他人已经提到了剪切和awk,我将使用sed提供解决方案:

echo "inet addr:172.30.1.6
bcast:172.30.140.255 掩码:255.255.252.0" | sed -e "s/.*\(addr:[^ ]*\) .*/\1/" 地址:172.30.1.6 回显 "内特地址:172.30.1.6 广播:172.30.140.255 掩码:255.255.252.0" |sed -e "s/.*addr:\([^ ]*\) .*/\1/" 172.30.1.6

使用带有分隔符的剪切

| cut -d':' -f 2 | cut -d' ' -f 1

这就是你想做的全部吗?

awk -F'[: ]' '/inet addr/{print $3; exit}'

例如,使用cat file代替ifconfig

$ cat file
inet addr:172.30.1.6  Bcast:172.30.140.255  Mask:255.255.252.0
$ cat file | awk -F'[: ]' '/inet addr/{print $3; exit}'
172.30.1.6

这是一种使用单个sed命令执行此操作的方法,消除了对grep的调用:

ifconfig | sed -n '/inet addr/{s/^.*inet addr:([^ ]*).*$/1/p;q}'

这里有一些事情发生:

  • sed -n告诉sed不要像往常一样打印每一行
  • /inet addr/是一个sed地址 - 它告诉sed只在包含"inet addr"的线路上运行
  • {}括号定义要运行的命令块,命令之间用;
  • s命令相当简单 - 它只是捕获 IP 并仅用 IP 替换整行
  • s命令末尾的p标志告诉sed打印替换结果。这是必要的,因为我们使用-n选项调用sed
  • q命令告诉sed退出,以便它只处理包含"inet addr"的第一行。

使用-n选项,/inet addr/地址、s命令上的p标志和q命令基本上具有与grep -m1 "inet addr"相同的效果,这使得调用grep变得没有必要。实际上,值得注意的是,以下命令生成相同的输出:

> ifconfig | grep -m1 "inet addr"
inet addr:192.168.1.1  Bcast:192.168.2.255  Mask:255.255.255.0
> ifconfig | sed -n '/inet addr/{p;q}'
inet addr:192.168.1.1  Bcast:192.168.2.255  Mask:255.255.255.0

在这里,我省略了sed命令的s/pattern/replacement/p部分,并将其替换为p命令(仅打印整行),只是为了单独显示其他部分的效果。

只需使用命令cut

ip a | grep -m1 "inet addr" | cut -d':' -f 2 | cut -d' ' -f 1 

我还建议您学习使用其他命令,例如:wc,sed,tr,sort,uniq。他们将帮助随心所欲地操纵输出。这是一个小课程,我们向您展示所有这些命令: https://www.javatpoint.com/linux-filters

我希望对您有所帮助。

使用 Bash 的正则表达式运算符=~

$ [[ $(ifconfig | grep -m1 "inet addr") =~ [0-9]+.[0-9]+.[0-9]+.[0-9]+ ]] && echo ${BASH_REMATCH[0]}
172.30.1.6

更新:评论中的内容更好。

最新更新