В скрипте #!/bin/sh в переменную значение от выполнения (grep|awk|sed)

(Что-то я не соображу)

Мне в скрипте надо присвоить переменной значение по результату выполнения (любого инструмента) grep|awk|sed, т.е. конструкцией:

x=$(lsusb | grep ...)


Чтобы в x не вся «найденная» строка появилась, а только числовое значение Bus.

Т.е. я регулярными выражениями «нахожу» нужную строку, но в результате grep (например), мне выдаётся вся строка, а мне нужен только «001».

Напомню, вывод lsusb:

# lsusb
Bus 001 Device 002: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

perl, python и других продвинутых инструментов не имею, т.к. BusyBox.
  • Вопрос задан
  • 9276 просмотров
Решения вопроса 1
Godless
@Godless
у грепа параметр есть выводить только подстроку, совпадающую с регуляркой
egrep -o [...]
egrep --only-matching [...]


получится что-то вроде
x=$(lsusb | egrep -o ...)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@gonzo
Обратные кавычки:

x=`lsusb | grep ... | awk '{print $2}'`
Ответ написан
Комментировать
@1x1
| cut -f 2 -d ' '
Ответ написан
Комментировать
@mcleod095
ну так grep и должен выодить строку в которой нашел совпадение
учите awk
x=$(lsusb | awk '/regexp/{print $2}')
за команды вида
cat file | grep
бейте себя по рукам
можно еще попробовать вот так
x=$(lsusb | grep regexp | cut -d" " -f 2)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы