Сценарий оболочки, получение/извлечение mac-адреса из консольного вывода команды после «MAC:»

#!/bin/bash

indir='/some/other/path'
outdir='/some/path'

list=( 001 002 003 )

for i in "${list[@]}"; do
    mkdir -p "$outdir/output_$i"
    python somescript.py -input "$indir/dir_$i" -output "$outdir/output_$i/table_$i.txt"

    inargs+=( -i "table_$i.q" )
done

some_other_script "${inargs[@]}" -o all.q

Наблюдения:

  1. Назначения могут не иметь места вокруг =.
  2. Отступы и пробелы улучшают читаемость.
  3. Не зацикливаться на строках, зацикливаться на массивах.
  4. Процитировать все раскрытия переменных.

Относительно цитирования расширений переменных:

1
27.03.2020, 01:35
3 ответа

Если я вас правильно понял:

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

Выход:

aa:bb:cc:dd:ee:ff
1
19.03.2021, 02:32

Вы можете попробовать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
1
19.03.2021, 02:32

Вы можете захватить любой допустимый 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
19.03.2021, 02:32

Теги

Похожие вопросы