Shell 脚本,在“MAC:”之后从命令的控制台输出中获取/提取 mac 地址

Shell 脚本,在“MAC:”之后从命令的控制台输出中获取/提取 mac 地址

我正在尝试使用 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

相关内容