使用grep管道错误消息

时间:2012-08-21 13:15:16

标签: grep stderr piping

我的脚本失败了,因为缺少某些文件。

运行脚本并将其传递给grep

$ ./adder | grep Error

产生以下输出:

Error in <TFile::ReadBuffer>: error reading all requested bytes from file v2.2_V3_194424_194712/output_853.root, got 0 of 300
Error in <TFile::Init>: v2.2_V3_194424_194712/output_853.root not a ROOT file

和类似的输出与不同的文件

我想从这个输出中提取像v2.2_V3_194424_194712/output_853.root这样的根文件,但是 做./adder | grep Error | grep .root不起作用。

为什么?

2 个答案:

答案 0 :(得分:5)

您需要将标准错误流(数字代码:2)从管道中的第一个命令重定向到标准输出流(数字代码:1),如下所示:

$ ./adder 2>&1 | grep Error

答案 1 :(得分:2)

像piokuc的建议,将stderr与stdout结合起来。但是,我认为你正在寻找一个更好的grep调用:

./adder 2>&1 | grep "^Error" | grep -oP '[^ ]*\.root'