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