Di Ubuntu, dengan perintah ifconfig -a
, saya mendapatkan semua informasi tentang antarmuka ethernet / wifi saya.
Tapi saya perlu mendapatkan sebagai output hanya alamat MAC, seperti:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Bagaimana saya bisa mendapatkan ini?
command-line
networking
simone_s1994
sumber
sumber
LANG=C ifconfig -a
alih-alihifconfig -a
untuk instalasi non-Inggris, bisa jadi masalah dengan grep. (Yaitu Dalam sistem saya,HWaddr
adalahdirecciónHW
)ifconfig -a | grep -i hw-*
?-*
berarti sesuatu?HW
tetapi dia menyatakanHWaddr
dan berbahasa Spanyol seperti yang saya kira / lihatdirecciónHW
jadi ituHW
bisa saja;)grep
"sangat eksperimental". Jika Anda ingin menggunakan regex dasar, perintah yang setara adalahifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
atau, jika Anda mauifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
,. Saya telah menghilangkan trailing$
karena output menyertakan spasi setelah alamat MAC, dan mungkin Anda tidak menginginkannya.Anda dapat mengakses
address
file untuk setiap perangkat di/sys
sistem file virtual. Alamat MAC harus dalam/sys/class/net/<device-name>/address
:Untuk semua perangkat:
sumber
ip
juga telah ada selama bertahun-tahun.Berikut ini beberapa cara:
grep
. Ada berbagai ekspresi reguler yang akan mengambil ini. Di sini, saya mencari 5 pengulangan dari 2 huruf atau angka diikuti oleh titik dua, lalu dua karakter. The-i
membuat kasus pertandingan sensitif dan-o
merekgrep
mencetak hanya bagian cocok.-E
memungkinkan ekspresi reguler yang diperluas. Regex yang sama juga berfungsi dengan PCRE (-P
).sed
. The-n
menekan output normal dan-r
memungkinkan ekspresi reguler diperpanjang. Dengan menggunakan regex yang sama seperti di atas, skrip ini akan berusaha mengganti semua yang ada di baris dengan bagian yang cocok dengan regex. Jika substitusi berhasil, garis yang dihasilkan dicetak (karenap
pada akhir substitusi).awk
. Jika baris dimulai dengan karakter kata ([a-zA-Z0-9_]
), dan memiliki 5 bidang, cetak yang terakhir.Perl, di mana, seperti biasa, ada lebih dari satu cara untuk melakukannya. Ini adalah logika yang sama dengan yang di
awk
atas. The-a
memberitahu perl untuk membagi setiap jalur input ke dalam@F
array.Atau, Anda dapat menggunakan regex dari pendekatan sebelumnya:
Coreutils.
sumber
Seperti yang dikomentari oleh beberapa orang,
ifconfig
sudah tidak digunakan lagi untukip
perintah ini. Jadi menggabungkan berbagai solusi dan komentar, saya akan menggunakan:sumber
ifconfig -a | grep HWaddr | awk '{print $5}'
Jika output sistem Anda bukan bahasa Inggris dalam perintah ini, maka masuk akal untuk menjalankannya dengan cara ini.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Ini berlaku untuk semua solusi.
sumber
grep
secara terpisah, Anda dapat memfilter denganawk
langsung seperti ini:ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
alih-alihifconfig -a
untuk instalasi non-Inggris, bisa jadi masalah dengan grep. (Yaitu Dalam sistem saya,HWaddr
adalahdirecciónHW
)@Helio
di awal komentar. Jika tidak, saya tidak akan diberitahu.