В Ubuntu с помощью команды ifconfig -a
я получаю всю информацию о моих интерфейсах ethernet / wifi.
Но мне нужно получить в качестве вывода только MAC-адрес, например:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Как я могу получить это?
command-line
networking
simone_s1994
источник
источник
LANG=C ifconfig -a
вместоifconfig -a
неанглоязычных установок, могут быть проблемы с grep. (т.е. в моей системеHWaddr
естьdirecciónHW
)ifconfig -a | grep -i hw-*
?-*
должно что-то значить?HW
но он заявилHWaddr
и говорит по- испански, как я думаю / вижу,direcciónHW
так что это простоHW
можно;)grep
"очень экспериментально". Если вы хотите использовать основное регулярное выражение, эквивалентная команда ,ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
или, если вы предпочитаете,ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
. Я пропустил трейлинг,$
потому что вывод содержит пробелы после MAC-адреса, и, вероятно, вы не хотите их.Вы можете получить доступ к
address
файлу для каждого устройства в/sys
виртуальной файловой системе. MAC-адрес должен быть в/sys/class/net/<device-name>/address
:Для всех устройств:
источник
ip
также существует уже много лет.Вот несколько способов:
grep
, Существуют различные регулярные выражения, которые подберут их. Здесь я ищу 5 повторений из 2 букв или цифр, за которыми следует двоеточие, а затем любые два символа.-i
Делает матч нечувствительны к регистру и-o
маркиgrep
печатать только совпадающую часть.-E
включает расширенные регулярные выражения. Это же регулярное выражение также работает с PCREs (-P
).sed
,-n
Подавляет нормальный выход и-r
обеспечивает расширенные регулярные выражения. Используя то же регулярное выражение, что и выше, этот скрипт попытается заменить все в строке той частью, которая соответствует регулярному выражению. Если подстановка прошла успешно, полученная строка печатается (из-p
за конца подстановки).awk
, Если строка начинается со слова character ([a-zA-Z0-9_]
) и имеет 5 полей, выведите последнее.Perl, где, как обычно, есть несколько способов сделать это. Это та же логика, что и
awk
выше.-a
Говорит Perl разделить каждую строку ввода в@F
массив.В качестве альтернативы вы можете использовать регулярные выражения из предыдущих подходов:
Coreutils.
источник
Как прокомментировали некоторые,
ifconfig
не рекомендуется в пользуip
команды. Объединяя различные решения и комментарии, я бы использовал:источник
ifconfig -a | grep HWaddr | awk '{print $5}'
Если в этой команде вывод вашей системы не является английским, то имеет смысл запустить его таким образом.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Это применимо ко всем решениям.
источник
grep
отдельно, вы можете отфильтроватьawk
прямо так:ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
вместоifconfig -a
неанглоязычных установок, могут быть проблемы с grep. (т.е. в моей системеHWaddr
естьdirecciónHW
)@Helio
в начале комментария. Если нет, я не буду уведомлен.