使用grep从ifconfig输出的行中提取IP地址

JJJ*_*jim 25 regex grep

鉴于这条特定的线路ifconfig,在我的情况下:

inet 192.168.2.13 netmask 0xffffff00 broadcast 192.168.2.255

如何提取192.168.2.13部分(本地IP地址),可能是正则表达式?

Ste*_*eve 57

这是使用的一种方式grep:

line='inet 192.168.2.13 netmask 0xffffff00 broadcast 192.168.2.256'

echo "$line" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
Run Code Online (Sandbox Code Playgroud)

结果:

192.168.2.13
192.168.2.256
Run Code Online (Sandbox Code Playgroud)

如果您只想选择有效地址,可以使用:

line='inet 192.168.0.255 netmask 0xffffff00 broadcast 192.168.2.256'

echo "$line" | grep -oE "\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
Run Code Online (Sandbox Code Playgroud)

结果:

192.168.0.255
Run Code Online (Sandbox Code Playgroud)

否则,只需选择您想要使用的字段awk,例如:

line='inet 192.168.0.255 netmask 0xffffff00 broadcast 192.168.2.256'

echo "$line" | awk -v OFS="\n" '{ print $2, $NF }'
Run Code Online (Sandbox Code Playgroud)

结果:

192.168.0.255
192.168.2.256
Run Code Online (Sandbox Code Playgroud)

附录:

字界限:\b


bur*_*ION 5

使用此正则表达式 ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?=\s*netmask)