2011-12-28 5 views
1

Я пытаюсь получить следующую команду работать, а не о/р становится напечатал:хвоста xmllint трубы Grep труба не работает

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

+0

Не является ли здесь 'grep' виновником? –

+0

Я предполагаю, что это больше связано с тем, что упоминалось в @fge. Вероятно, xmllint не может найти EOF. Но есть ли способ для этого работать? – kodeninja

ответ

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

0

Попробуйте что-то вроде этого -

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

Не работает. Он выдает эту ошибку: 'bash: --format: command not found' – kodeninja