我正在尝试使用 shell 脚本自动提取 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
我能够将其捕获到 shell 脚本变量中,但很难尝试仅提取 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}'
你可以把它放在一个varialbe中
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 shell 中:
$ regex='(([[:xdigit:]]{2}:){5}([[:xdigit:]]{2}))';
$ [[ $var =~ $regex ]] && printf '%s\n' "${BASH_REMATCH[1]}"
aa:bb:cc:dd:ee:ff