使用grep过滤命令输出

时间:2016-03-31 12:17:35

标签: logging grep

我有一个我正在使用的命令行程序,它会记录到控制台。但是,对于某些有缺陷的固件,它会每1秒打印一次错误。

如何使用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

现在这里有什么问题?显然,我使用的是正确的命令,因为它适用于第二个例子。它只是省略了我想要的实际行!

我错过了什么?

1 个答案:

答案 0 :(得分: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)