"MAC:" 다음에 나오는 명령의 콘솔 출력에서 ​​mac 주소를 가져오거나 추출하는 쉘 스크립트

"MAC:" 다음에 나오는 명령의 콘솔 출력에서 ​​mac 주소를 가져오거나 추출하는 쉘 스크립트

Arduino 장치의 MAC 주소를 자동으로 추출하기 위해 쉘 스크립트를 사용하려고 하는데 이 작업을 수행하는 데 도움이 필요합니다.

다음은 명령에서 반환된 출력입니다.

Opening /dev/cu.SLAB_USBtoUART @ 115200...
Connecting to ESP32 ROM, attempt 1 of 10...
Connecting to ESP32 ROM, attempt 2 of 10...
  Connected, chip: ESP32D0WDQ5 R1
efuse_wr_disable     : 0x0084
efuse_rd_disable     : 0x1
flash_crypt_cnt      : 0x01 (WD)
WIFI_MAC_Address     : 0xaaaaaaaaaaaaaa (MAC: aa:bb:cc:dd:ee:ff)
SPI_pad_config_hd    : 0x0
chip_package         : 0x1
cpu_freq_low         : 0x0

쉘 스크립트 변수로 캡처할 수 있지만 MAC 주소만 추출하는 데 문제가 있습니다.aa:bb:cc:dd:ee:ff

출력은 항상 정확히 동일하며 (MAC:그 뒤에 mac 주소를 구성하는 17개 문자와 종결자가 옵니다.)

해당 부분을 가져오기 위해 이 모든 출력이 저장되는 변수에 사용할 수 있는 명령으로 누군가 나를 도와줄 수 있습니까 aa:bb:cc:dd:ee:ff? 나는 운이 없이 몇 시간 동안 검색하고 시도했습니다. 감사합니다!

답변1

당신은 시도 할 수 있습니다awk

my_command_with_output | awk -F'[()]' '/^WIFI_MAC_Address/{sub(/^.*: /,"");print $1}'

변수에 넣을 수 있습니다.

variable=$(my_command_with_output | awk -F'[()]' '/^WIFI_MAC_Address/{sub(/^.*: /,"");print $1}')

변수의 내용을 인쇄합니다.

echo "$variable"

산출

aa:bb:cc:dd:ee:ff

답변2

내가 올바르게 이해했다면:

echo "$var" |  grep -o "..:..:..:..:.."

산출:

aa:bb:cc:dd:ee:ff

답변3

다음 정규식을 사용하여 유효한 MAC(앞에 공백 포함)을 캡처할 수 있습니다.

command  |   grep -oE '([ :][[:xdigit:]]{2}){6}'

또는 bash 쉘에서:

$ regex='(([[:xdigit:]]{2}:){5}([[:xdigit:]]{2}))';
$ [[ $var =~ $regex ]] &&  printf '%s\n' "${BASH_REMATCH[1]}"
aa:bb:cc:dd:ee:ff

관련 정보