Использование grep для получения только имени интерфейса и адреса MA C через MacOs ifconfig - PullRequest
1 голос
/ 21 марта 2020

Я использую MacOS и для его администрирования хочу получить только с помощью grep список с

имя интерфейса и macaddress

lo0 ether 00:00:00:00:00:00 
gif0 ether 00:00:00:00:00:00 
stf0 ether 00:00:00:00:00:00 
en0 ether 00:00:00:00:00:00 
en5 ether 00:00:00:00:00:00 
en1 ether 00:00:00:00:00:00 
en2 ether 00:00:00:00:00:00 
en3 ether 00:00:00:00:00:00 
en4 ether 00:00:00:00:00:00 
utun0 ether 00:00:00:00:00:00

Я пробовал объявление, я пробовал некоторые команды, которые написал ut лучшее, что я могу сделать, это:

ifconfig | echo `grep -oE '^[a-zA-Z]{1,4}[0-9]{1,4}'`

output:

lo0 gif0 stf0 en0 en5 en1 en2 en3 en4 utun0

кто-то более подготовил меня?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Простой Perl скрипт для чтения вывода ifconfig будет работать. Мы определяем имя экземпляра ($inst) как символы, которые начинаются с строки и заканчиваются двоеточием и одним или несколькими пробелами. Совпадение, соответствующее этому критерию, сохраняется, и чтение l oop продолжается. Когда строка начинается с одного или нескольких пробелов и встречается токен ether, мы печатаем имя экземпляра и только что прочитанную строку.

ifconfig|perl -ne 'if (m/^(.+):\s+/) {$inst=$1};if (m{^\s+ether}) {print $inst,$_}'
en0     ether 34:15:9e:23:7b:78 
en1     ether 7c:6d:62:73:ff:4e 
p2p0    ether 0e:6d:62:73:ff:4e 

Если настаивает только на синтаксическом анализе grep, это даст сырую экстракцию, которая затем может быть подвергнута дальнейшему массажу:

ifconfig|grep -Eo '^[0-9a-z]+:|ether.+'|grep -B1 -Eo 'ether.+'|grep -v -- "--"|paste - -

en0:    ether 34:15:9e:23:7b:78 
en1:    ether 7c:6d:62:73:ff:4e 
p2p0:   ether 0e:6d:62:73:ff:4e 
0 голосов
/ 21 марта 2020

Это может немного приблизить вас:

grep -o '\b[0-9a-z:]*[0-9]\b' 

Но в выводе есть новые строки:

lo0
00:00:00:00:00:00
gif0
00:00:00:00:00:00
stf0
00:00:00:00:00:00
en0
00:00:00:00:00:00
en5
00:00:00:00:00:00
en1
00:00:00:00:00:00
en2
00:00:00:00:00:00
en3
00:00:00:00:00:00
en4
00:00:00:00:00:00
utun0
00:00:00:00:00:00

Однако, если вы разрешите использование xargs, вы может получить решение, в котором ваш интерфейс и ma c находятся на одной строке:

grep -o '\b[0-9a-z:]*[0-9]\b'  | xargs -L2
lo0 00:00:00:00:00:00
gif0 00:00:00:00:00:00
stf0 00:00:00:00:00:00
en0 00:00:00:00:00:00
en5 00:00:00:00:00:00
en1 00:00:00:00:00:00
en2 00:00:00:00:00:00
en3 00:00:00:00:00:00
en4 00:00:00:00:00:00
utun0 00:00:00:00:00:00

grep ищет строку, содержащую число. Таким образом, эфир опускается из соответствующих строк. Конечно, это не очень общее решение.

Конечно, если вы хотите использовать тики замены оболочки (или лучше $()):

 ifconfig | echo $( grep -o '\b[0-9a-z:]*[0-9]\b'  )
...