首页 文章

用sed过滤stdout / stderr

提问于
浏览
0

我有一个使用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 回答

  • 1

    您可以使用 grep 代替:

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

    如果它只是“缺少显示”你想过滤掉,你可以使用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)相同的地址(&) .

  • 1

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

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

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

相关问题