2014-02-15 26 views
0

嗨,大家好我有this threadgrep的只是最後一行後發現所需的文件

我需要找到特定文件名的一些文件,並使用grep對這些文件的最後一行找到某個字符串的擴展問題。

我目前有:

find my_dir/ -name "*filename*" | xargs grep 'lookingfor'

我是新來使用這些命令這麼多的幫助,將不勝感激。先謝謝你。

回答

2

比如,你可以這樣做:

find my_dir/ -name "*filename*" -exec sh -c "tail -200 {} | grep lookingfor" \; 

設置200到你想要的最後行數。

+2

這樣他就失去了檔案名稱 – user3159253

+0

@ user3159253他可以只爲'[tag:grep]添加'-H'標誌來修復該問題 – BroSlow

+2

不,他不能。尾巴吃的文件名,而grep只適用於'STDIN' – user3159253

2

我會去與

find my_dir -name '*filename*' -type f \ 
    -exec /bin/bash -c '(tail -5 "$1" | grep -q lookingfor) && echo "$1"' _ {} \; 

這樣你會正確地處理所有的(當然,希望所有:-))的文件名,甚至包括那些「及其他內部奇怪的符號。此外,我會建議顯式調用/斌/慶典,因爲/ bin/sh的可能像ashsashdash一個殘缺的SH-變種被鏈接。

+0

另外,它似乎我剛剛在bash中發現了一個bug /一個奇怪的行爲:'bash -c'echo \ $ @ = \「$ @ \」;' a b c'給我'$ @ =「b c」':-)。這就是爲什麼我需要在命令參數'{}'之間添加一個'_'的原因 – user3159253

1

使用find + AWK + WC -l

find my_dir -name '*filename*' -type f -exec awk 'NR>count-100{print FILENAME, $0}' count=$(wc -l < {}) {} + 

將100調整爲所需的最後一行數。