用sed过滤stdout / stderr

时间:2013-12-09 21:50:26

标签: regex bash sed

我有一个使用XVFB的应用程序,以便无头运行。应用程序运行正常,但我确实得到了大量难以捉摸的Xlib:扩展“RANDR”缺少显示“:1”错误。这个错误实际上没有任何后果,只是大量的错误用无用的信息填充我们的日志文件。我想做的是过滤掉那个字符串。

我们运行生成日志文件,如下所示:

DISPLAY=":1" $PYBIN myScript.pyc > myLogfile.log 2>&1 &

我正在尝试将python脚本的输出传递给sed,过滤掉“Xlib:extension”RANDR“在显示屏上丢失”:1“',然后将结果写入myLogfile.log。这就是我正在尝试的,但没有骰子:

DISPLAY=":1" $PYBIN myScript.pyc | sed -n "missing on display" > myLogfile.log  

我在哪里将stderr重定向到stdout,以便它们都由sed处理? 如何正确格式化REGEX?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以改为使用grep

DISPLAY=":1" $PYBIN myScript.pyc 2>&1 | grep -v "missing on display" > myLogfile.log

答案 1 :(得分:1)

如果它只是“缺少显示”你想要过滤掉,你可以使用grep -v:

DISPLAY=":1" $PYBIN myScript.pyc &> | grep -v 'Xlib: extension "RANDR" missing on display ":1"' > myLogfile.log

&>将所有输出重定向到bash / ksh下的STDOUT。如果您正在运行其他shell,则可能需要使用2>&1

“2”是STDERR的文件描述符,所以我们说“将文件#2的输出发送到与文件#1”相同的地址(&)(STDOUT)。

答案 2 :(得分:1)

使用sed,您可以使用模式和d flag

DISPLAY=":1" $PYBIN myScript.pyc 2>&1 \
| sed '/missing on display/d' \
| > myLogfile.log

我正在使用\在多行上拆分命令。