2011-12-28 75 views
1

我试图让下面的命令工作,但没有O/P是越来越印刷:尾管的grep管xmllint没有工作

tail -f mylog.log | grep --line-buffered -Eo '<S:Envelope .+Envelope>' | xmllint --format --recover - 

但是,如果我用grep从文件相同的模式,和管它到xmllint,它的工作原理:

grep --line-buffered -Eo '<S:Envelope .+Envelope>' tmp.xml | xmllint --format --recover - 

我在第一个命令丢失了什么?

+1

也许'xmllint'尝试读取,直到EOF?在管道的情况下,它看不到任何 – fge 2011-12-28 21:08:47

+0

这里不是grep的罪魁祸首吗? – 2011-12-28 22:12:10

+0

我想它更多的是与@fge提到的有关。 xmllint可能无法找到EOF。但是有没有办法让这个工作? – kodeninja 2011-12-29 01:09:47

回答

5

你可以试试这个(未经测试):

tail -f mylog.log | grep -Eo '<S:Envelope .+Envelope>' | while read line; do 
    echo $line | xmllint --format --recover - 
done 

(这是假设,即xmllint没有找到EOF下,因此仍然在等待输入)

+0

工作!谢谢@fge。 – kodeninja 2011-12-29 20:20:59

0

尝试是这样的 -

grep --line-buffered -Eo '<S:Envelope .+Envelope>' <(tail -f mylog.log) &1> xmllint --format --recover - 
+0

没有工作。它会抛出这个错误:'bash:--format:command not found' – kodeninja 2011-12-29 20:19:09