In Ubuntu, con comando ifconfig -a, ottengo tutte le informazioni sulle mie interfacce ethernet / wifi.
Ma devo ottenere come output solo l'indirizzo MAC, come:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Come posso ottenere questo?
In Ubuntu, con comando ifconfig -a, ottengo tutte le informazioni sulle mie interfacce ethernet / wifi.
Ma devo ottenere come output solo l'indirizzo MAC, come:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Come posso ottenere questo?
Risposte:
Il modo più semplice sarebbe usare grepcon PCRE:
$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
grep -Pci consentirà di utilizzare perlRegex compatibile
grep -o prenderà solo la parte corrispondente della linea
Abbiamo abbinato HWaddrdavanti ai nostri partita desiderata (indirizzi MAC) e poi scarta HWaddrda \Kper stampare solo gli indirizzi MAC.
@Helio ha menzionato un punto importante, questo dipende fortemente dalla tua lingua, ovvero dalle localeimpostazioni. Per ovviare a questo è possibile utilizzare le Cimpostazioni internazionali (utilizza il set di caratteri ASCII) solo per questo comando:
$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
ifconfig -a | grep -i hw-*?
-*dovrebbe significare qualcosa?
HWma ha affermato HWaddre spagnolo come immagino / vedo, direcciónHWquindi è semplicemente HWpossibile;)
grep"è altamente sperimentale". Se si desidera utilizzare regex di base, il comando equivalente è ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'o, se si preferisce, ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'. Ho omesso il trailing $perché l'output include spazi dopo l'indirizzo MAC e probabilmente non li vuoi.
È possibile accedere al addressfile per ciascun dispositivo sul /sysfilesystem virtuale. L'indirizzo MAC dovrebbe essere in /sys/class/net/<device-name>/address:
$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c
Per tutti i dispositivi:
$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45
ipda anni.
Ecco alcuni modi:
grep. Esistono varie espressioni regolari che le raccolgono. Qui sto cercando 5 ripetizioni di 2 lettere o numeri seguite da due punti, quindi due caratteri qualsiasi. La -irende il match case insensitive e le -omarche grepstampare solo la parte corrispondente. -Eabilita espressioni regolari estese. Lo stesso regex funziona anche con PCREs ( -P).
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed. Il -nsopprime uscita normale e l' -rabilita le espressioni regolari estese. Usando la stessa regex di cui sopra, questo script tenterà di sostituire tutto sulla linea con la parte di essa corrispondente alla regex. Se la sostituzione ha avuto esito positivo, viene stampata la riga risultante (a causa della pfine della sostituzione).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk. Se la riga inizia con un carattere parola ( [a-zA-Z0-9_]) e ha 5 campi, stampa l'ultimo.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, dove, come al solito, ci sono più di un modo per farlo. Questa è la stessa logica di cui awksopra. La -adice a Perl di dividere ciascuna linea di ingresso nella @Fmatrice.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
In alternativa, puoi usare regex dagli approcci precedenti:
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
Come alcuni hanno commentato, ifconfigè deprecato a favore del ipcomando. Quindi, combinando le varie soluzioni e commenti, userei:
$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF
ifconfig -a | grep HWaddr | awk '{print $5}'
Se l'output del tuo sistema non è l'inglese in questo comando, ha senso eseguirlo in questo modo.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Questo è applicabile a tutte le soluzioni.
grepseparatamente puoi filtrare awkdirettamente in questo modo: ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -ainvece che ifconfig -aper installazioni non inglesi, possono esserci problemi con grep. (cioè nel mio sistema, lo HWaddrè direcciónHW)
@Helioall'inizio del commento. In caso contrario, non mi verrà notificato.
LANG=C ifconfig -ainvece cheifconfig -aper installazioni non inglesi, possono esserci problemi con grep. (cioè nel mio sistema,HWaddrèdirecciónHW)