Разделить переменную построчно

Я инициализирую переменную следующим образом:

dmesgDevs=$(dmesg | grep idVendor)

и хочу печатать ее построчно, а затем проверяю, есть ли слово в определенной строке.

2
задан 20 September 2013 в 00:56

1 ответ

1113 Хранение большего количества строк в переменной может быть очень болезненным. Фактически, когда вы используете только dmesg | grep idVendor, вывод будет организован в большее количество строк, но когда вы сделаете dmesgDevs=$(dmesg | grep idVendor), все строки будут объединены в одну строку.

Теперь, чтобы печатать dmesgDevs построчно, вы можете установить переменную внутреннего разделителя полей (IFS), а затем разрешить ее анализ в массив. Примерно так он будет анализировать каждый раз, когда одна строка ввода разделяется [:

while IFS='[' read ADDR; do for i in "${ADDR[@]}"; do echo $i; done; done <<< "$dmesgDevs"

Наконец, чтобы проверить, есть ли слово в определенной строке, просто перенаправьте вывод предыдущей команды на grep :

while IFS='[' read ADDR; do for i in "${ADDR[@]}"; do echo $i; done; done <<< "$dmesgDevs" | grep 'word'

В этом случае мне удалось найти решение, потому что каждая строка начинается с одного и того же шаблона ([), но это происходит не всегда. Таким образом, вместо этого, вместо того, чтобы сохранить вывод команды dmesg | grep idVendor в переменной, сохраните его в файле; например, в /tmp/dmesgDevs. Вы можете сделать это, используя:

dmesg | grep idVendor > /tmp/dmesgDevs

Тогда все очень просто:

cat /tmp/dmesgDevs
grep 'word' /tmp/dmesgDevs
0
ответ дан 20 September 2013 в 00:56

Другие вопросы по тегам:

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