2011-03-25 64 views
40

基本上我不知道爲什麼這不輸出任何東西:爲什麼在使用grep兩次時不顯示輸出?

tail --follow=name file.txt | grep something | grep something_else 

你可以認爲它應該產生輸出我遇到另一條線,以確認

cat file.txt | grep something | grep something_else 

好像你可以」 t管道的輸出不止一次!?任何人都知道交易是什麼,並且有解決方案嗎?

編輯: 要回答迄今爲止的問題,該文件必須具有應該由grep顯示的內容。作爲證據,如果grep的是,像這樣做:

tail --follow=name file.txt | grep something 

輸出顯示正確,但如果這是代替:

tail --follow=name file.txt | grep something | grep something 

沒有輸出顯示。

如果在所有有用的,我運行Ubuntu 10.04

+0

[如何'grep'連續流?](https://stackoverflow.com/q/7161821/995714) – 2018-01-18 08:07:33

回答

84

你也可以使用grep緩衝管內部時遇到問題。 也就是說,你沒有看到

tail --follow=name file.txt | grep something > output.txt 

輸出,因爲grep的會緩衝自己的輸出。

使用grep的的--line緩衝開關來解決此問題:

tail --follow=name file.txt | grep --line-buffered something > output.txt 

,如果你想要得到的結果,這是有用的跟隨到output.txt的文件儘可能快地。

+0

剛剛檢查了這一點,並檢查了您的解決方案。比我的解決方法更清潔和更精確,標記爲正確的解決方案。當然是 – radman 2012-08-29 00:19:51

-1

你知道tail開始默認使用文件的最後十行?我的猜測是cat版本發現的一切都很好。嘗試tail -n+1 --follow=name file.txt從文件的開始處開始。

-1

爲我工作在Mac上沒有--follow=name

bash-3.2$ tail delme.txt | grep po 
position.bin 
position.lrn 
bash-3.2$ tail delme.txt | grep po | grep lr 
position.lrn 
+0

試過這個,它實際上也適用於我,但是--follow = name部分對我想要實現的功能至關重要 – radman 2011-03-25 02:54:45

+0

當然,它的工作原理沒有後續部分,因爲這是由緩衝引起的,一旦grep(無後續)退出就會刷新緩衝。 – 2011-10-19 08:20:12

6

想通了什麼怎麼回事。事實證明,該命令正在工作,它只是輸出花費很長時間才能到達控制檯(在我的情況下大約需要120秒)。這是因爲標準輸出上的緩衝區不是每行寫入,而是寫入每個塊。所以,不要在寫文件的時候從文件中讀取每一行,而是每隔2分鐘左右獲取一個大塊。

應當指出的是,這正常工作:

tail file.txt | grep something | grep something 

它與--follow=name的文件,該文件是有問題的下面。

對於我而言,我發現一個辦法解決它,我正打算做的是拍攝第一grep來一個文件的輸出,這樣的命令是:

tail --follow=name file.txt | grep something > output.txt 

解決的辦法是使用script命令像這樣:

script -c 'tail --follow=name file.txt | grep something' output.txt 

腳本捕捉命令的輸出,並寫入到文件,從而避免了第二管。

這已經有效地解決了我的問題,並且我已經解釋了爲什麼命令沒有按預期工作,問題解決了。

僅供參考,這些其他計算器的問題是相關的:
Trick an application into thinking its stdin is interactive, not a pipe
Force another program's standard output to be unbuffered using Python

-1

grep pattern filename | grep模式| grep模式| grep模式......

+0

,但與「尾巴」的組合是這個問題的重要部分...... – radman 2013-05-24 23:23:47

相關問題