Le moyen le plus simple serait d’utiliser grep
avec PCRE:
$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
grep -P
nous permettra d'utiliser perl
des regex compatibles
grep -o
ne prendra que la partie correspondante de la ligne
Nous avons identifié HWaddr
avant notre correspondance désirée (adresses MAC), puis jeter HWaddr
par \K
d'imprimer uniquement les adresses MAC.
@Helio a mentionné un point important, cela dépend fortement de votre langue, c'est-à-dire des locale
paramètres. Pour surmonter cela, vous pouvez utiliser les C
paramètres régionaux (utilise le jeu de caractères ASCII) pour cette commande uniquement:
$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
LANG=C ifconfig -a
au lieu deifconfig -a
pour des installations non anglaises, peut avoir des problèmes avec grep. (c'est-à-dire dans mon système,HWaddr
c'estdirecciónHW
)ifconfig -a | grep -i hw-*
?-*
censé vouloir dire quelque chose?HW
mais il a dit surHWaddr
et espagnol comme je suppose / voirdirecciónHW
donc c'est tout simplementHW
possible;)grep
"est hautement expérimental". Si vous souhaitez utiliser regex de base, la commande équivalente estifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
ou, si vous préférez,ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
. J'ai omis la fin$
car la sortie inclut des espaces après l'adresse MAC et vous ne voulez probablement pas ceux-ci.Vous pouvez accéder au
address
fichier pour chaque périphérique du/sys
système de fichiers virtuel. L'adresse MAC doit être dans/sys/class/net/<device-name>/address
:Pour tous les appareils:
la source
ip
existe depuis des années.Voici quelques façons:
grep
. Il existe diverses expressions régulières qui vont les chercher. Ici, je cherche 5 répétitions de 2 lettres ou chiffres suivis de deux points, puis de deux caractères quelconques. Cela-i
rend la correspondance insensible à la casse et ne-o
permet d'grep
imprimer que la partie correspondante.-E
active les expressions régulières étendues. La même expression régulière fonctionne également avec PCRE (-P
).sed
. La-n
supprime la sortie normale et-r
active les expressions régulières étendues. En utilisant la même expression régulière que ci-dessus, ce script tentera de remplacer tout ce qui se trouve sur la ligne par la partie de celle-ci qui correspond à l'expression régulière. Si la substitution a réussi, la ligne résultante est imprimée (en raison dep
la fin de la substitution).awk
. Si la ligne commence par un mot ([a-zA-Z0-9_]
) et comporte 5 champs, imprimez le dernier.Perl, où, comme d'habitude, il y a plus d'une façon de le faire. Celui-ci est la même logique que
awk
ci - dessus. Le-a
signe à Perl de scinder chaque ligne d'entrée dans le@F
tableau.Sinon, vous pouvez utiliser l'expression régulière des approches précédentes:
Coreutils.
la source
Comme certains l'ont commenté, il
ifconfig
est déconseillé en faveur de laip
commande. Donc, combinant les différentes solutions et commentaires, j'utiliserais:la source
ifconfig -a | grep HWaddr | awk '{print $5}'
Si la sortie de votre système n'est pas en anglais dans cette commande, il est logique de l'exécuter de cette façon.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Ceci est applicable à toutes les solutions.
la source
grep
vous pouvez filtrer séparément avecawk
directement comme celui - ci:ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
place deifconfig -a
pour des installations non anglaises, des problèmes avec grep. (c'est-à-dire dans mon système,HWaddr
c'estdirecciónHW
)@Helio
au début du commentaire. Sinon, je ne serai pas averti.