通过尾部grep多个文件

时间:2014-09-11 08:15:32

标签: grep tail

尝试用多个文件中的一个短语进行grep,因为它们不断填充(日志),但是提示用短语更新了哪个文件。

例如:

grep bindaddr /vservers/*/var/log 

得到我:

/vservers/11010/var/log:bindaddr=xxx.xxx.xxx.xxx
/vservers/12525/var/log:bindaddr=xxx.xxx.xxx.xxx
/vservers/12593/var/log:bindaddr=xxx.xxx.xxx.xxx

哪个很酷,但我需要这个尾巴-f。

tail -fn 100 /vservers/*/var/log | grep bindaddr 

获取所需的行但没有指示哪个文件,所以我需要两者的混合。

3 个答案:

答案 0 :(得分:2)

如果您在-v中使用tail,则会获得详细模式:来自man tab - > “总是输出标题给出文件名”。这样,每当文件中发生某些事情时,您将获得前一行的标题。

与此同时,您可以使用grep -B1来显示匹配项+上一行。

总之,这应该做:

tail -fvn 100 /vservers/*/var/log | grep -B1 bindaddr

测试

在一个标签中执行此操作:

$ echo "hi" >> a2
$ echo "hi" >> a2
$ echo "hi" >> a1
$ echo "hi" >> a2

我在另一个中得到了这个:

$ tail -vfn 100 /tmp/a* | grep -B1 "h"
==> /tmp/a1 <==

==> /tmp/a2 <==
hi
hi

==> /tmp/a1 <==
hi

==> /tmp/a2 <==
hi

答案 1 :(得分:0)

像这样将文件名放在tail的每一行的前面:

#!/bin/bash
# Arrange to kill all descendants on exit/interrupt
trap "kill 0" SIGINT SIGTERM EXIT
for f in *.txt; do
    tail -f "$f" | sed "s/^/"$f": /" > /dev/tty &
done
# grep in stdin (i.e. /dev/tty)
grep bina -

答案 2 :(得分:0)

我认为有些人来这篇文章是为了寻找一种在抓取多个文件的尾部时显示文件名的方法:

for f in path/to/files*.txt; do echo $f; tail $f | grep 'SEARCH-THIS';  done;

这将显示这样的输出

filename1.txt
 search result 1
 search result 2

filenam2.txt
 search result 3
 search result 4

...