Как перенаправить часть stderr и stdout в / dev / null

2172
Jav

Моя программа выводит на stderrи stdout. Я хочу grep для "образца" или в stderrи stdout. И я хочу, чтобы остальные были отправлены /dev/null.

Если я перенаправляю после перенаправления stderr: ./prog 2>/dev/null | grep "pattern" я не получаю строки, stderrкоторые содержат «шаблон».

Если я труба перед перенаправлением stderr: ./prog | grep "pattern" 2>/dev/null ни один из stderrперенаправляется/dev/null

Спасибо за помощь.

0
* Если я передам перенаправить stderr: ./prog | grep "pattern" 2> / dev / null никто из stderr не перенаправляется в / dev / null *: и как это плохо? MariusMatutiae 10 лет назад 0
Мне бы хотелось, чтобы были видны только строки, содержащие «шаблон». Не все из Стдерр. Jav 10 лет назад 0
Это то, что вы получаете с `/ prog | grep "pattern" `автоматически. MariusMatutiae 10 лет назад 0
@MariusMatutiae: нет, обычный канал ("|") только перенаправляет стандартный вывод в следующий процесс. stderr будет проходить «вбок» и полностью (нефильтрованно) появляться на выходе. tshinbum 10 лет назад 0

2 ответа на вопрос

5
tshinbum

если вам не важно, происходит ли совпадение строк из stdout или stderr, просто объедините два потока, перенаправив stderr в stdout, а затем выполните grep:

$ your_program 2>&1 | grep "pattern" 

пример работает в sh, bash, ksh, zsh. csh должен быть:

$ your_program |& grep "pattern" 
1
someuser
./prog 2>&1 | grep pattern 

Вы должны видеть только строки, содержащие «шаблон»

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