Передача сообщений об ошибках с помощью grep

У меня есть сценарий, который не работает, потому что отсутствуют некоторые файлы.

Запуск скрипта и передача его в grep

$ ./adder | grep Error

производит следующий вывод:

Error in <TFile::ReadBuffer>: error reading all requested bytes from file v2.2_V3_194424_194712/output_853.root, got 0 of 300
Error in <TFile::Init>: v2.2_V3_194424_194712/output_853.root not a ROOT file

и аналогичный вывод с разными файлами

Я хотел бы извлечь корневые файлы, такие как v2.2_V3_194424_194712/output_853.root, из этого вывода, но выполнение ./adder | grep Error | grep .root не работает.

Почему это?


person mareks    schedule 21.08.2012    source источник


Ответы (2)


Как предлагает piokuc, объедините stderr с stdout. Однако я думаю, что вы ищете лучший вызов grep:

./adder 2>&1 | grep "^Error" | grep -oP '[^ ]*\.root'
person Steve    schedule 21.08.2012

Вам необходимо перенаправить стандартный поток ошибок (числовой код: 2) из ​​первой команды в канале в стандартный поток вывода (числовой код: 1), например:

$ ./adder 2>&1 | grep Error
person piokuc    schedule 21.08.2012