Regex 从grep输出中按索引获取行

Regex 从grep输出中按索引获取行,regex,linux,grep,ip,Regex,Linux,Grep,Ip,我正在尝试获取计算机的ipv4地址。 我已经做到了,但是有没有办法从返回的数据中指定您想要的索引2 ip a | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" 输出 127.0.0.1 192.168.13.131 192.168.13.255 一个选项是通过管道将其传输到sed并打印第二行 ip a | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sed -n 2p 另一

我正在尝试获取计算机的ipv4地址。 我已经做到了,但是有没有办法从返回的数据中指定您想要的索引2

ip a | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
输出

127.0.0.1
192.168.13.131
192.168.13.255

一个选项是通过管道将其传输到sed并打印第二行

ip a | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sed -n 2p
另一种选择是使用head和tail的组合,用head显示前n个项目,然后从结果中提取最后一个项目

ip a | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -n2 | tail -n1

如果pcre支持
-p
,您也可以使用更长的模式,使用量词重复匹配ip号码n次,例如
{2}
重复2次

然后使用
\K
清除匹配缓冲区并仅输出感兴趣的ip号码

ipa | grep-Poz“(?s)\a(?:*?(?:[0-9]{1,3}\){3}[0-9]{1,3}{2}.*\K(?[0-9]{1,3}\){3}[0-9]{1,3}”
^^^量词

使用
awk
,请尝试以下内容,按照您的尝试编写

ip a | 
awk '
  match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) && ++count==2{
     print substr($0,RSTART,RLENGTH)
}'
说明:添加上述解决方案的详细说明

ip a |
##Running ip a command and sending its output to awk as input
awk '
##Starting awk program from here.
  match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) && ++count==2{
##Using match function to match IP address and checking if its 2nd time coming.
     print substr($0,RSTART,RLENGTH)
##Printing matching sub string here.
}'

可能使用head从顶部获取2行,然后使用tail-n1从那些
ipa | grep-Eo”([0-9]{1,3}){3-9]{1,3}{head-n2 | tail-n1
中获取最后一行,或者将其传输到sed并打印第2行
ipa | grep-Eo”([0-9]{1,3}){sed-n>