W Ubuntu za pomocą polecenia ifconfig -auzyskuję wszystkie informacje o moich interfejsach ethernet / wifi.
Ale muszę uzyskać jako wynik tylko adres MAC, taki jak:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Jak mogę to uzyskać?
W Ubuntu za pomocą polecenia ifconfig -auzyskuję wszystkie informacje o moich interfejsach ethernet / wifi.
Ale muszę uzyskać jako wynik tylko adres MAC, taki jak:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Jak mogę to uzyskać?
Odpowiedzi:
Najłatwiejszym sposobem byłoby użycie grepz PCRE:
$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
grep -Pumożliwi nam korzystanie z perlkompatybilnego Regexu
grep -o zajmie tylko dopasowaną część linii
Dopasowaliśmy HWaddrprzed naszym pożądanym dopasowaniem (adresy MAC), a następnie odrzucamy HWaddr, \Kaby wydrukować tylko adresy MAC.
@Helio wspomniał o ważnym punkcie, który jest wysoce zależny od twojego języka, tj locale. Ustawień. Aby obejść ten Cproblem , możesz użyć ustawień regionalnych (używa zestawu znaków ASCII) tylko dla tego polecenia:
$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
ifconfig -a | grep -i hw-*?
-*ma coś znaczyć?
HWale stwierdził, że jest po HWaddrhiszpańsku, jak sądzę / widzę, direcciónHWwięc po prostu HWmożna;)
grep„jest wysoce eksperymentalne”. Jeśli chcesz korzystać z podstawowej regex, odpowiednik polecenia jest ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'lub, jeśli wolisz, ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'. Pominąłem końcowe, $ponieważ wynik zawiera spacje po adresie MAC i prawdopodobnie nie chcesz ich.
Możesz uzyskać dostęp do addresspliku dla każdego urządzenia w /syswirtualnym systemie plików. Adres MAC powinien znajdować się w /sys/class/net/<device-name>/address:
$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c
Dla wszystkich urządzeń:
$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45
iptakże istnieje od lat.
Oto kilka sposobów:
grep. Są różne wyrażenia regularne, które je wychwycą. Tutaj szukam 5 powtórzeń 2 liter lub cyfr, a następnie dwukropka, a następnie dowolnych dwóch znaków. -iSprawia, że wielkość liter nieczuły i -omarki grepwydrukować tylko dopasowaną część. -Ewłącza rozszerzone wyrażenia regularne. Ten sam regex działa również z PCREs ( -P).
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed. -nHamuje normalne wyjście i -rumożliwia rozszerzonych wyrażeń regularnych. Używając tego samego wyrażenia regularnego jak powyżej, ten skrypt spróbuje zastąpić wszystko w wierszu częścią, która pasuje do wyrażenia regularnego. Jeśli podstawienie zakończyło się powodzeniem, wydrukowany zostanie wynikowy wiersz (z powodu pkońca zamiany).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk. Jeśli linia zaczyna się od znaku słowa ( [a-zA-Z0-9_]) i ma 5 pól, wydrukuj ostatnie.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, gdzie, jak zwykle, jest więcej niż jeden sposób, aby to zrobić. Ta jest taka sama logika jak awkpowyżej. -aMówi Perl podzielić każdą linię wejścia do @Ftablicy.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
Alternatywnie możesz użyć wyrażenia regularnego z poprzednich podejść:
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
Jak niektórzy komentowali, ifconfigjest przestarzałe na rzecz ippolecenia. Łącząc różne rozwiązania i komentarze, użyłbym:
$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF
ifconfig -a | grep HWaddr | awk '{print $5}'
Jeśli dane wyjściowe systemu nie są w języku angielskim w tym poleceniu, warto uruchomić je w ten sposób.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Dotyczy to wszystkich rozwiązań.
greposobno, możesz filtrować awkbezpośrednio tak: ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -azamiast ifconfig -ado instalacji w języku innym niż angielski, mogą występować problemy z grep. (tzn. w moim systemie HWaddrjest direcciónHW)
@Heliona początku komentarza. Jeśli nie, nie otrzymam powiadomienia.
LANG=C ifconfig -azamiastifconfig -ado instalacji w języku innym niż angielski, mogą występować problemy z grep. (tzn. w moim systemieHWaddrjestdirecciónHW)