动态构建grep字符串

时间:2009-07-08 09:19:32

标签: linux shell grep tail

我正在编写一个shell脚本,以便在不断增长的日志文件中执行“尾部”操作。此脚本接受要搜索的参数,并逐步增加它们的输出。

例如,如果调用脚本如下:

logs.sh string1 string2

它应该转换为:

tail -f logs.txt | grep string1 | grep string2

我正在构建像这样的grep字符串列表:

full_grep_string=""
for grep_string in $*
do
    full_grep_string="$full_grep_string | grep $grep_string" 
done

字符串是正确构建的,但是当我尝试最终将它标记为tail命令时,就像这样......

tail -f $LOG_FILE_PATH $full_grep_string

...... grep不适用,我得到未经过滤的日志。

我在这里遗漏了什么吗?或者有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

eval tail -f $LOG_FILE_PATH $full_grep_string

答案 1 :(得分:1)

grep缓冲它找到的行。所以修改你的代码

full_grep_string="$full_grep_string | grep --line-buffered $grep_string" 

应该有效。我在debian lenny上测试了它(使用bash)。

并使用an0

的提示
eval tail -f ...

(这一切都适用于整个单词)