Ubuntu'da komut ile ifconfig -a
ethernet / wifi arayüzlerimle ilgili tüm bilgileri edindim.
Ancak , yalnızca MAC adresi olarak çıktı almam gerekiyor , şöyle ki:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Bunu nasıl elde edebilirim?
Ubuntu'da komut ile ifconfig -a
ethernet / wifi arayüzlerimle ilgili tüm bilgileri edindim.
Ancak , yalnızca MAC adresi olarak çıktı almam gerekiyor , şöyle ki:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Bunu nasıl elde edebilirim?
Yanıtlar:
En kolay yol grep
PCRE ile kullanmak olacaktır :
$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
grep -P
perl
uyumlu Regex kullanmamızı sağlayacak
grep -o
sadece çizginin eşleşen kısmını alacaktır
Biz eşleştirdiniz HWaddr
bizim arzu maç (MAC adresleri) önce ve sonra atmak HWaddr
tarafından \K
sadece MAC adreslerini yazdırmak için.
@Helio önemli bir noktadan bahsetti, bu sizin dilinize, yani locale
ayarlarınıza oldukça bağlı . C
Yerel ayarları (ASCII karakter kümesini kullanır) yalnızca bu komut için kullanabileceğinizi aşmak için:
$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
ifconfig -a | grep -i hw-*
?
-*
şey ifade etmesi mi gerekiyor?
HW
ama o belirtilen HWaddr
ve G / tahmin gördüğünüz gibi ispanyolca direcciónHW
basitçe sadece oluyor böylece HW
); olabilir
grep
"son derece deneysel" dir. Temel regex kullanmak istiyorsanız, eşdeğer komut ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
veya eğer isterseniz ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
,. İzi ihmal ettim $
çünkü çıktı MAC adresinden sonra boşluklar içeriyor ve muhtemelen bunları istemiyorsunuz.
Sanal dosya sistemindeki address
her cihaz için dosyaya erişebilirsiniz /sys
. MAC adresi şöyle olmalıdır /sys/class/net/<device-name>/address
:
$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c
Tüm cihazlar için:
$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45
ip
ayrıca yıllardır civarında olmuştur.
İşte birkaç yol:
grep
. Bunları alacak olan düzenli ifadeler var. Burada, iki harf veya ardından iki noktadan sonra 2 harf veya sayıdan oluşan 5 tekrar arıyorum. -i
Maç vaka duyarsız hale getirir ve -o
markaları grep
sadece eşleşti bölümünü yazdırmak. -E
genişletilmiş düzenli ifadeler sağlar. Aynı regex PCRE'ler ( -P
) ile de çalışır .
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed
. -n
Normal çıkış bastırır ve -r
genişletilmiş düzenli ifadeler sağlar. Yukarıdakiyle aynı regex kullanarak, bu komut satırı ile ilgili her şeyi regex ile eşleşen kısmıyla değiştirmeye çalışır. Eğer oyuncu değişikliği başarılı olduysa, sonuçtaki satır ( p
oyuncu değişikliği sonunda) yazdırılır .
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk
. Satır bir kelime karakteriyle ( [a-zA-Z0-9_]
) başlıyorsa ve 5 alan varsa, sonuncuyu yazdırın.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, her zamanki gibi, yapmanın birden fazla yolu var. Bu, awk
yukarıdakiyle aynı mantıktır . -a
Her bir giriş hattını ayırmak için Perl anlatır @F
dizisi.
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
Alternatif olarak, regex'i önceki yaklaşımlardan kullanabilirsiniz:
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
Bazılarının da söylediği gibi, komutun ifconfig
lehine itiraz edildi ip
. Bu yüzden çeşitli çözümleri ve yorumları birleştirerek kullanırdım:
$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF
ifconfig -a | grep HWaddr | awk '{print $5}'
Sistem çıktınız bu komutta İngilizce değilse, bu şekilde çalıştırmanız mantıklı olacaktır.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Bu, tüm çözümler için geçerlidir.
grep
Ayrı ayrı kullanmak yerine awk
doğrudan şöyle filtreleyebilirsiniz :ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
yerine ifconfig -a
grep ile ilgili sorunlar olabilir, olmayan ingilizce yüklemeler için. (yani benim sistemde, HWaddr
olduğu direcciónHW
)
@Helio
yorumun başına geçin. Olmazsa, haberdar edilmeyeceğim.
LANG=C ifconfig -a
yerineifconfig -a
grep ile ilgili sorunlar olabilir, olmayan ingilizce yüklemeler için. (yani benim sistemde,HWaddr
olduğudirecciónHW
)