Поиск и печать строк на выходе, которые могут содержать строки с ошибками

У меня есть пример команды

device list

, который дает мне все устройства с их статусом в порядке или ошибки в следующем формате

[okay     ]:  you are listening on : 11
[error    ]:  not currently listening: 22
[error    ]:  not currently listening: 33
[okay     ]:  you are listening on : 111

Я хочу только распечатать устройства, которые имеют статус в порядке или ошибка .

Я попытался использовать команду grep как

device list | grep -r 'okay'
device list | grep -r '[okay     ]'
device list | grep -r '^okay'
device list | grep  'okay'

Но она не печатала какой-либо вывод. Как я могу напечатать устройства со статусом как grep

Спасибо заранее.

1
задан 24 March 2014 в 17:25

2 ответа

Из предоставленного нам результата, по крайней мере, версия grep должна была работать. Если это не так, единственная возможная причина заключается в том, что эта команда не выводит свой вывод на STDOUT, а на STDERR. Оба они отображаются на любом терминале / консоли по умолчанию, но такие команды, как grep, когда он вводит через канал (|), делают это только с STDOUT.

Решение состоит в перенаправлении вывод STDERR в STDOUT, это будет делать 2>&1 или |&:

$ device list 2>&1 | grep okay
$ device list |& grep okay

3 первых формы вашей команды, используя grep -r, никогда не будут работать, даже если вы перенаправляете вывод STDERR, потому что опция -r используется для рекурсии в каталог и подкаталог. Поэтому, даже если он используется после канала, grep -r something будет искать что-то в файлах во всех каталогах, откуда вы запускаете команду.

2
ответ дан 24 May 2018 в 10:28

Удалите параметр -r вашей команды grep, и он будет работать:

device list | grep 'okay'

-r предназначен для рекурсивного поиска.

1
ответ дан 24 May 2018 в 10:28

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

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