2011-03-25 66 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

相关问题