У меня есть пример команды,
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'
Но это не распечатало вывода. Как я могу распечатать устройства с состоянием как хорошо.
Заранее спасибо.
Вы не должны использовать -r
опция с grep
в этом случае, потому что (взгляд man grep
):
-r, --recursive Read all files under each directory, recursively, following symbolic links only if they are on the command line. This is equivalent to the -d recurse option.
также необходимо перенаправить и ошибки от стандартного вывода, который будет передан по каналу grep
команда с помощью 2>&1
перенаправление:
device list 2>&1 | grep 'okay'
Или можно использовать |&
:
device list |& grep 'okay'
От вывода, данного нам, по крайней мере, версия 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
для рекурсивного поиска.