regex - grep 的管道不适用于尾部?

标签 regex linux bash grep

<分区>

我正在尝试通过检查日志来调试一个场景,这是我的命令

tail -f eclipse.log | grep 'enimation' | grep  -i 'tap'

基本上我想做的是,在所有的线条中,我正在打印带有动画的线条,然后在所有的动画中,我想看到带有“点击”的动画。

这是返回空结果的示例数据

*******enimation error*********TapExpand
*******enimation error*********TapShrink

这将返回空结果。

如果我运行这个命令

 tail -f eclipse.log | grep  -i 'enimation.*tap'

它返回正确的结果。有人可以向我解释一下,上面两个命令有什么区别,为什么结果会不一致。他们在我看来都一样。

最佳答案

grep 正在缓冲它的输出。要告诉 GNU grep 吐出输出 line-by-line 你需要在 grep 中使用 --line-buffered 选项来让它工作:

tail -f eclipse.log | grep --line-buffered 'enimation' | grep --line-buffered -i 'tap'

根据man grep:

--line-buffered
    Force output to be line buffered.  By default, output is line buffered when standard
    output is a terminal and block buffered otherwise.

关于regex - grep 的管道不适用于尾部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26362450/

相关文章:

c# - 如何使用正则表达式在定义的单词之间捕获任意字符串?

ruby - 在本地安装 gem 命令

c++ -/usr/bin/ld 找不到 -l<nameOfLibrary>

bash - 在 bash 中查找按空格分割的字符串中的选项

c++ - 使用 C++ 正则表达式一次性替换多个正则表达式

c - posix 扩展正则表达式 : (()|abc)xyz 的预期行为

c++ - 如何在没有OOM killer 的情况下发出C++终止捕获

macos - 我怎样才能摆脱这个 osascript 输出?

linux - 如何知道哪个进程正在更改 linux 中的文件