У меня есть пример команды
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
Спасибо заранее.
Из предоставленного нам результата, по крайней мере, версия 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 будет искать что-то в файлах во всех каталогах, откуда вы запускаете команду.
Удалите параметр -r вашей команды grep, и он будет работать:
device list | grep 'okay'
-r предназначен для рекурсивного поиска.