「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

関連情報