2009-07-08 48 views
2

我正在編寫一個shell腳本來在增長的日誌文件上執行「尾部」操作。該腳本接受要搜索的參數,並遞增地查詢它們的輸出。動態構建grep字符串

例如,如果腳本調用如下:

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不適用,我得到未經過濾的日誌。

我失去了一些東西在這裏?還是有更簡單的方法來做到這一點?

+0

只是一個小的澄清:那是你的腳本應該輸出的日誌文件的行同時包含的想法string1和string2,還是你打算找到包含任何字符串的行? – 2009-07-08 09:29:36

+0

另外,你在用什麼外殼?慶典? – 2009-07-08 09:31:14

+0

對我來說,debian lenny我必須面對兩個grep加在一起的問題,不能用尾巴-f,但用尾巴 – tuergeist 2009-07-08 09:41:15

回答

2
eval tail -f $LOG_FILE_PATH $full_grep_string 
1

grep緩衝找到的行。所以修改你的代碼到

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

應該工作。我在debian lenny上測試了它(用bash)。

並使用AN0

eval tail -f ... 

的頂端(這一切工作全字)