grep
. Існують різні регулярні вирази, які підберуть їх. Тут я шукаю 5 повторень з 2 букв чи цифр з наступною двокрапкою, а потім будь-якими двома символами. -i
Робить матч нечутливі до регістру і -o
марки grep
друкувати тільки збігається частина. -E
дозволяє розширити регулярні вирази. Цей же регекс працює і з PCRE ( -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
. Якщо рядок починається з символу слова ( [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
)