Regex 使用grep/sed/awk提取对应于某个字段的字符串

Regex 使用grep/sed/awk提取对应于某个字段的字符串,regex,linux,awk,sed,Regex,Linux,Awk,Sed,在我的Fedora系统上,我得到以下信息: $ cat /proc/net/arp IP address HW type Flags HW address Mask Device 130.48.0.1 0x1 0x2 80:4b:c7:10:3e:41 * wlp1s0 如何使用屏幕编辑器(如sed、grep或awk)通过管道传输设备的结果在这种情况下答案是wlp1

在我的Fedora系统上,我得到以下信息:

$  cat /proc/net/arp 
IP address      HW type     Flags       HW address            Mask     Device
130.48.0.1       0x1         0x2         80:4b:c7:10:3e:41     *        wlp1s0
如何使用屏幕编辑器(如sed、grep或awk)通过管道传输设备的结果在这种情况下答案是wlp1s0

谢谢

awk 'NR>1{print $6}' < /proc/net/arp
如果我们在第一行之后要去掉标题设备,请打印第六个字段,以空格分隔

$ awk '/^[0-9]/{print $6}' /proc/net/arp 
wlp1s0
/^[0-9]/选择以数字ip开头的行

print$6打印设备的第6列


要获取用于离开计算机的接口名称,可以使用以下命令:

ip route get 8.8.8.8 | awk 'NR==1 {print $5}'
eth0

即使有多个inf处于联机状态,它也将始终获得正确的inf。

如果设备始终显示为最后一列,则假定您的字段以制表符分隔:

$ awk -F'\t' 'NR>1{print $NF}' file
wlp1s0
否则:

$ awk -F'\t' 'NR==1{for (i=1;i<=NF;i++) f[$i]=i; next} {print $(f["Device"])}' file
wlp1s0
四种方法:

awk 'NR==1{for (i=1;i<=NF;i++) f[$i]=i; next} {print $(f["HW"])}' </proc/net/arp

awk 'NR==2{print $NF}' < /proc/net/arp

sed -nr '/^[0-9]/s#(.*)* (.*)#\2#gp' /proc/net/arp

sed -nr '/^[0-9]/s#(.*)\*[^a-z]*(.*)#\2#gp'  /proc/net/arp

非常感谢。这比回答我的问题更有用,对此我也表示感谢!!@user3236841解决了你的问题吗?既然你是新来的,如果你的问题已经解决了,请别忘了把答案标为“接受”。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!这并不能给出正确的答案。它给出了一行:awk-F'\t''NR==1{for i=1;它表明您的文件并没有用制表符分隔。