簡體   English   中英

使用grep / sed / awk提取與特定字段對應的字符串

[英]use grep/sed/awk to extract string corresponding to certain field

在我的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 '/^[0-9]/{print $6}' /proc/net/arp 
wlp1s0
  • /^[0-9]/選擇以ip開頭的行

  • print $6打印第六列作為設備

要獲取用於退出計算機的接口名稱,可以使用以下命令:

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

即使在線有多個inf,它也始終會正確無誤。

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

如果我們在第一行之后(以擺脫標題“ Device”),則打印第六個字段(由空格分隔)。

如果設備始終顯示為最后一列,則假定您的字段用制表符分隔:

$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM