grep, Существуют различные регулярные выражения, которые подберут их. Здесь я ищу 5 повторений из 2 букв или цифр, за которыми следует двоеточие, а затем любые два символа. -iДелает матч нечувствительны к регистру и -oмарки grepпечатать только совпадающую часть. -Eвключает расширенные регулярные выражения. Это же регулярное выражение также работает с PCREs ( -P).
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed, -nПодавляет нормальный выход и -rобеспечивает расширенные регулярные выражения. Используя то же регулярное выражение, что и выше, этот скрипт попытается заменить все в строке той частью, которая соответствует регулярному выражению. Если подстановка прошла успешно, полученная строка печатается (из- pза конца подстановки).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk, Если строка начинается со слова character ( [a-zA-Z0-9_]) и имеет 5 полей, выведите последнее.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, где, как обычно, есть несколько способов сделать это. Это та же логика, что и awkвыше. -aГоворит Perl разделить каждую строку ввода в @Fмассив.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
В качестве альтернативы вы можете использовать регулярные выражения из предыдущих подходов:
ifconfig -a | perl -lne '/(([a-z0-9]{2}:){5}..)/ && print $1'
Coreutils.
LANG_ALL=C ifconfig -a | grep 'HWadd' | tr -s ' ' '\t' | cut -f 5
LANG=C ifconfig -aвместоifconfig -aнеанглоязычных установок, могут быть проблемы с grep. (т.е. в моей системеHWaddrестьdirecciónHW)