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

时间:2014-11-27 05:32:40

标签: 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等屏幕编辑器来管道设备的结果(在这种情况下答案是wlp1s0)?

谢谢!

5 个答案:

答案 0 :(得分:1)

$ awk '/^[0-9]/{print $6}' /proc/net/arp 
wlp1s0
  • /^[0-9]/选择以digit,ip

  • 开头的行
  • print $6打印第6列作为设备

答案 1 :(得分:1)

要获取用于退出计算机的接口名称,可以使用:

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

即使不止一个inf在线,它也会始终正确。

答案 2 :(得分:0)

awk 'NR>1{print $6}' < /proc/net/arp

如果我们在第一行之后(为了摆脱标题&#34; Device&#34;),请打印第六个字段(用空格分隔)。

答案 3 :(得分:0)

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

$ 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

答案 4 :(得分:0)

四种方法:

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