2016-03-31 2 views
2

У меня есть программа командной строки, которую я использую, которая входит в систему на консоли. Однако, сделайте это с помощью какой-либо неисправной прошивки, она печатает определенную ошибку каждые 1 секунду.Выход команды фильтра с использованием grep

Как я могу использовать grep для фильтрации вывода, чтобы эта конкретная строка ошибки была исключена из входа в консоль?

Точная ошибка, я хочу, чтобы избавиться от того, является:

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 

Если я создаю sh скрипт с ошибочной строкой в ​​нем, например, так:

#!/bin/sh 

echo "[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 
echo "testing" 

А потом запустить его, выход, как и ожидалось,

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 
testing 

Теперь, если я запускаю его с помощью grep -v к т чень пропустить эту строку, например, так:

./script.sh | grep -v "[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 

Выход еще:

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 
testing 

Однако если я запускаю тот же сценарий, на этот раз пытается избавиться от строки, содержащей testing , например, так:

./script.sh | grep -v "testing" 

Тогда будет, как и следовало ожидать выход:

[1] [NTC] [NET] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned 

Теперь то, что здесь не так ?? Ясно, что я использую правильную команду, так как она работает во втором примере. Это просто не работает, чтобы опустить фактическую строку, в которой я хочу!

Что мне не хватает?

+0

Пожалуйста, прочтите https://stackoverflow.com/help/how-to-ask. Также, пожалуйста, продемонстрируйте любые попытки, которые вы сделали самостоятельно. Вы должны сделать некоторые попытки, прежде чем спрашивать. –

+0

@EtanReisner - Обновленный вопрос –

+0

Квадратные скобки являются метасимволами регулярного выражения. Они означают класс персонажа. Они не соответствуют нормальным символам. Вам нужно сбежать от них (с '\\') или сообщить grep использовать фиксированные шаблоны (с флагом 'fgrep' или' -F' до 'grep'). –

ответ

2

Я понял!

Печать строк на консоли была отправлена ​​на stderr, поэтому grep даже не смотрел ни на что.

Команда, которую я пытался сделать это работа:

sudo motion 2> >(grep -v "\[1\] \[NTC\] \[NET\] netcam_read_html_jpeg: Potential split boundary - 1447 chars flushed, 1 re-positioned" 1>&2) 
+0

Это одно решение. 'sudo motion 2> & 1 | grep ... 'также работал бы (без необходимости замены менее переносного процесса). –

Смежные вопросы