команда | грэп | awk сохранить в переменную или выполнить как функцию

На это есть два ответа.

Определение всего

Как вы уже догадались, не все стирается. Это как плата для сухой протирки :ее можно протереть, но плата останется. Он все еще знает, как быть доской для сухой уборки. Устройство имеет фиксированный набор метаданных, которые оно не позволит стереть. Эти данные можно прочитать, но они не отображаются с другими данными. Например, USB-устройство, когда вы его подключаете, ОС будет запрашивать различные вещи :Серийный номер, номер производителя, тип устройства (клавиатура, указатель, массовое -хранилище, сеть, концентратор, … ). Как только ОС получит это, она может загрузить определенный драйвер, а затем начать чтение/запись содержимого хранилища.

Также может быть программа, которую запускает встроенный процессор (контроллер ). Вы ничего не можете сделать, чтобы увидеть это, и вы определенно не можете стереть это.

Много разных устройств или нет

Существует ограниченное количество типов устройств. USB определяет несколько основных типов (HID :указатель, клавиатура; массовое -хранилище, сеть, аудио, видео, … ). Если USB-устройство сертифицировано, то оно должно использовать один из этих предварительно -определенных типов, поэтому совместимость (и -сертифицированных устройств не гарантируется, и для них могут потребоваться проприетарные драйверы ). ].

3
07.03.2021, 12:01
1 ответ

Да, это приведет к ошибке, поскольку =в присвоении переменных не может быть окружено пробелами в оболочке. Оболочка будет интерпретировать строку как то, что вы хотите запустить команду с именем varс аргументами =и тем, что возвращает ваша подстановка команды (после дополнительного разделения результата на слова и применения подстановки имени файла к этим словам, поскольку это без кавычек ).

Вместо этого используйте

var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )

Я также позволил себе избавиться от grepи catи заменить устаревшую подстановку команд с использованием обратных апострофов на подстановку с использованием $(... ).

Вы также можете сделать это с помощью grep, cutи head:

.
var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )

или, если ваш grepимеет опцию -mдля остановки после определенного количества совпадений:

var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )

или,если выражение, которое вы ищете, на самом деле является строкой, а не регулярным выражением:

var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )
8
18.03.2021, 22:26

Теги

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