2008-10-01 28 views

回答

14

使用命令

tail -f file.log | grep --line-buffered "my pattern" | while read line 
do 
    echo $line 
done 

--line-buffered是这里的关键,否则读会失败。

1

这应该工作,即使没有GNU的grep:

tail -f -n 0 logfile.out | nawk '/pattern/ {system("echo do something here")}' 

编辑:增加了 “-n 0”,只有文本的新OCCURENCES将被匹配。

5

只有tail使用:

tail -f file.log | while read line; do if [[ $line == *text* ]]; then 
    mycommand 
fi; done 
0

我喜欢matli的答案。 Bruno De Fraine的回答也很好,因为它只使用shell命令,而不是其他程序(如awk)。它受到整条线必须匹配魔术字符串的问题。这个问题并不清楚,这是需求的一部分。

我将修改它一点点应对“尽快”的条款在原来的问题

logfile_generator | tee logfile.out | nawk '/pattern/ {system("echo do something here")}' 

其中logfile_generator是产生在首位的日志文件的程序。这个修改只要魔术字符串被找到就执行“东西”。

+2

我的解决方案匹配任何包含“文本”(这是模式*文本*所做的)的行,而不仅仅是等于“文本”的行。在Bash手册中查看[[]]化合物和==的描述。 – 2008-10-02 06:54:23

1

另外,您也可以查看inotailtail -f的替代品,它仅在您感兴趣的文件发生更改时才使用inotify框架来唤醒。通常的tail -f只是在轮询之间短暂休息,这是一种有效但不是非常有效的解决方案。

相关问题