2014-11-27 3 views
-1

В моей системе Fedora, я получаю следующее:использование Grep/СЭД/AWK для извлечения строки, соответствующей определенному полю

$ 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 

Как я могу трубы результат устройства (в данном случае ответ wlp1s0) с помощью редактора экрана, такого как sed или grep или awk?

Спасибо!

ответ

1
$ awk '/^[0-9]/{print $6}' /proc/net/arp 
wlp1s0 
  • /^[0-9]/ выбирает строки, которые начинаются с цифры, IP

  • print $6 печатает шестой Колум является устройство

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

Если мы после первой строки (чтобы избавиться от заголовка «Device»), печать шестого поля (разделенного пробелом).

1

Чтобы получить имя интерфейса, используемые, чтобы выйти из компьютера , вы можете использовать это:

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

Он всегда будет правильно, даже если более одного инфанта онлайн.

+1

Спасибо. Это еще более полезно, чем ответ на мой вопрос, за что я также благодарен !! – user3236841

+0

Решил ли ваша проблема, @ user3236841? Поскольку вы новичок здесь, пожалуйста, не забудьте отметить ответ, принятый, если ваша проблема уже решена. Вы можете сделать это, нажав на галочку рядом с ответом, чтобы переключить ее с полого на зеленый. См. [Справочный центр> Задать вопрос] (http://stackoverflow.com/helpcenter/someone-answers), если у вас есть какие-либо сомнения! – fedorqui

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 
+0

Это не дает правильного ответа. Это скорее дает строку: awk -F '\ t' 'NR == 1 {для (i = 1; i <= NF; i ++) f [$ i] = i; next} {print $ (f ["Устройство"])} '/ proc/net/arp 130.48.0.1 0x1 0x2 80: 4b: c7: 10: 3e: 41 * wlp1s0 – user3236841

+0

Тогда ваш файл просто не разделен на вкладку , –

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#(.*)[[:punct:]]*(.*)#\2#gp' /proc/net/arp 
Смежные вопросы