我想从多个日志文件中grep一个模式,这些日志文件会被某些进程不断更新并尾随grep连续输出。 下面命令不工作,我得到 - 尾:警告:无限期跟随标准输入无效尾多个文件和grep的输出
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
有人可以帮助解决了这一点?
我想从多个日志文件中grep一个模式,这些日志文件会被某些进程不断更新并尾随grep连续输出。 下面命令不工作,我得到 - 尾:警告:无限期跟随标准输入无效尾多个文件和grep的输出
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
有人可以帮助解决了这一点?
你应该看看multitail
工具(安装使用sudo apt-get install multitail
)
总之,使用multitail,您需要使用--mergeall
标志在一个地方查看所有输出
multitail --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
你可以做同样没有用grep
multitail -E "Search this: " --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log
要单独查看输出使用multitail,这会给文件名以及。
multitail -E "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
你使用的是什么版本的multitail?我无法用Debian打包的版本grep输出multitail:_multitail 5.2.13_ – Thor
@Thor更正了我的答案。 –
错误在于您将文件提供给grep命令而不是尾部。
尾部-f需要获取文件作为输入。尝试:
tail -f /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
也得到文件名(但它不会像grep的输出,它是):
tail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered -e'^==> .* <==$' -e'Search this: '
谢谢。这部分工作,但我没有得到的模式找到的文件名? – 212
这是一个有趣的问题,简单的答案应该是:使用前缀交换机尾,但遗憾的是目前这不是在tail
大多数版本中实现。
正如我所看到的,您有两种选择:使标准工具适应任务(请参阅Udys answer)或使用您最喜爱的脚本/编程语言编写自己的工具。
以下是您可以使用File::Tail::Multi
模块为perl
执行此操作的一种方法。请注意,您可能需要从CPAN安装模块(cpan -i File::Tail::Multi
)。
保存以下脚本,例如mtail
添加到您的可执行文件路径并使脚本可执行。
#!/usr/bin/env perl
use File::Tail::Multi;
$| = 1; # Enable autoflush
$tail = File::Tail::Multi->new(RemoveDuplicate => 0,
OutputPrefix => 'f',
Files => \@ARGV);
while(1) { $tail->read; $tail->print; sleep 2 }
变化OutputPrefix
到'p'
如果你喜欢全路径前缀。
运行这样的:
mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "
你并不需要指定--line-buffered
时grep
为最后一个命令,所以这是足够了:
mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep "Search this: "
1)这与使用multitail有什么不同? 2)是否按文件名输出,如OP在@Udys中的评论中所要求的答案> –
@ ansh0l:1)multitail以curses输出其结果,这是不可纠正的。 2)是的,每行都有始发文件的名称。 – Thor
好的,诅咒+1。但是使用-E标志的多字节标志,你不需要执行grep本身。 –
重复的http://superuser.com/questions/59471/simple-use-tail-grep-multiple-conditions –