Ubuntu에서는 command ifconfig -a
를 사용하여 이더넷 / wifi 인터페이스에 대한 모든 정보를 얻습니다.
그러나 다음과 같이 MAC 주소 만 출력으로 얻어야합니다 .
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
이것을 어떻게 얻을 수 있습니까?
Ubuntu에서는 command ifconfig -a
를 사용하여 이더넷 / wifi 인터페이스에 대한 모든 정보를 얻습니다.
그러나 다음과 같이 MAC 주소 만 출력으로 얻어야합니다 .
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
이것을 어떻게 얻을 수 있습니까?
답변:
가장 쉬운 방법은 grep
PCRE와 함께 사용하는 것입니다 .
$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
grep -P
perl
호환되는 Regex 를 사용할 수있게 해줄 것입니다
grep -o
일치하는 부분 만 취합니다
우리는 일치 한 HWaddr
우리의 원하는 경기 (MAC 주소) 전에 다음 폐기 HWaddr
에 의해 \K
에만 MAC 주소를 인쇄 할 수 있습니다.
@Helio는 중요한 요점을 언급했습니다. 이는 언어, 즉 locale
설정 에 따라 크게 다릅니다 . 이를 극복 C
하기 위해이 명령에만 로케일 (ASCII 문자 세트 사용)을 사용할 수 있습니다 .
$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13
ifconfig -a | grep -i hw-*
되나요?
-*
뭔가를 의미 하는가?
HW
했지만 그가 말하고 HWaddr
스페인어로 말했듯 direcciónHW
이 그것은 단순히 HW
가능합니다.)
grep
" 정말 실험적인" 펄 정규식 . 기본 정규식을 사용하려는 경우 해당하는 명령은 ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
또는 원하는 경우 ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
입니다. $
출력에 MAC 주소 뒤에 공백이 포함되어 있기 때문에 후행을 생략했으며 아마도 원하지 않을 것입니다.
가상 파일 시스템의 address
각 장치에 대한 파일에 액세스 할 수 있습니다 /sys
. MAC 주소는 다음과 같아야합니다 /sys/class/net/<device-name>/address
.
$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c
모든 장치의 경우 :
$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45
ip
또한 년 동안 주변되었습니다.
몇 가지 방법이 있습니다.
grep
. 이것을 선택할 다양한 정규 표현식이 있습니다. 여기서는 2 문자 또는 숫자의 5 반복과 콜론, 두 문자를 차례로 찾고 있습니다. 는 -i
경기 케이스를 구분하게하고 -o
차종은 grep
단지 일치하는 부분을 인쇄 할 수 있습니다. -E
확장 정규 표현식을 사용합니다. 동일한 정규식도 PCRE ( -P
) 와 함께 작동합니다 .
ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
sed
. 는 -n
정상 출력을 억제하고는 -r
확장 된 정규 표현식을 수 있습니다. 위와 동일한 정규 표현식을 사용하여이 스크립트는 라인의 모든 것을 정규 표현식과 일치하는 부분으로 대체하려고 시도합니다. 대체가 성공한 경우 결과의 줄이 인쇄됩니다 ( p
대체가 끝날 때).
ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
awk
. 행이 단어 문자 ( [a-zA-Z0-9_]
)로 시작 하고 5 개의 필드가있는 경우 마지막 행을 인쇄하십시오.
ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
Perl, 평소와 같이 여러 가지 방법이 있습니다. 이것은 awk
위와 같은 논리 입니다. 이 명령 -a
은 perl에게 각 입력 행을 @F
배열 로 분할하도록 지시합니다 .
ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
또는 이전 방법의 정규식을 사용할 수 있습니다.
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
ifconfig -a | grep HWaddr | awk '{print $5}'
이 명령에서 시스템 출력이 영어가 아닌 경우이 방법으로 실행하는 것이 좋습니다.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
이것은 모든 솔루션에 적용됩니다.
grep
별도로 사용하는 대신 다음과 awk
같이 직접 필터링 할 수 있습니다. ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
대신에 사용할 ifconfig -a
수 있으며 grep에 문제가있을 수 있습니다. (예 : 내 시스템에서 HWaddr
입니다 direcciónHW
)
@Helio
의견의 시작 부분에 넣으십시오 . 그렇지 않은 경우 알림을받지 않습니다.
LANG=C ifconfig -a
대신에 사용할ifconfig -a
수 있으며 grep에 문제가있을 수 있습니다. (예 : 내 시스템에서HWaddr
입니다direcciónHW
)