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
)