web-dev-qa-db-ja.com

シェルスクリプト、「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

これをシェルスクリプト変数に取り込むことはできますが、aa:bb:cc:dd:ee:ffのMACアドレスだけを抽出するのに苦労しています。

出力は常にまったく同じになり、(MAC:の後にMACアドレスを構成する17文字が続き、最後に)が続きます。

aa:bb:cc:dd:ee:ff部分だけを取得するために、この出力がすべて格納されている変数で使用できるコマンドを誰かが手伝ってくれませんか?運が悪かったので何時間も探してみました、ありがとう!

1
sMyles

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
1
Jetchisel

私があなたを正しく理解している場合:

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

出力:

aa:bb:cc:dd:ee:ff

この正規表現を使用して、有効な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
0
Isaac