2012-01-25 76 views

回答

7

嗯,我想的grep不支持限制n在文件的結尾匹配,所以這是你必須做的

ls *.log | while read fn; do grep -iH create "$fn" | tail -1; done 

更換tail -1 -1與N.(-H選項是什麼打印文件名,否則它不會被打印,如果你是在單個文件中的grep,那正是我們正在做的)

注:以上soln將工作正常與空格的文件名。

對於N從文件的開頭匹配

grep -i -m1 create *.log 

更換-m1 1 N.

+0

使用'這樣ls'可以是一個非常糟糕的主意。這是[爲什麼](http://mywiki.wooledge.org/ParsingLs)? –

+1

@Jaypal'非常糟糕的主意',以及如果上述情況下的日誌文件是由已知來源創建的,那麼過度設計soln是沒有意義的。如果他們不是,那麼我可以理解增加的複雜性。 – havexz

+0

'grep模式文件|尾巴-1'會做 – Azi

1

這種情況下,袖口,但讀這How to do something to every file in a directory using bash?作爲一個起點。這是我的看法,假設每個文件只有最後20場比賽。

for i in * 
do 
    if test -f "$i" 
    then 
    grep somestring $i | tail -n 20 
    fi 
done 

可能不完全正確,沒有文件在我面前檢查,但應該是一個起點。

1
for file in /path/to/logs/*.log 
do 
    tail <(grep -H 'pattern' "$file") 
done 

這將通過最後10行默認列表列出過去的10場比賽爲tail。如果你希望得到一個不同的號碼,然後下面將幫助 -

for file in /path/to/logs/*.log 
do 
    tail -n number <(grep -H 'pattern' "$file") 
done 

其中number可以是你的線

0

最後發生搜索模式在當前目錄下的每個日誌文件的數量:

find . -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | tail -n1" 

首先發生搜索patte的RN在當前目錄下的每個日誌文件:

find . -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | head -n1" 

與出現的編號替換1-n1你想


或者您可以使用find-exec選項,而不是xargs

find . -name \*log\* -exec sh -c "grep --color=always -iH pattern {} | tail -n1" \; 

您可以使用-mtimefind限制了你的日誌文件的搜索,讓我們說5天

find . -mtime -5 -name \*log\* | xargs -I{} sh -c "grep --color=always -iH pattern {} | tail -n1"