2012-05-11 47 views
1

用GREP計算短語的出現次數用GREP計算短語的出現次數

我有一個包含一堆文件的目錄。所以,當我需要看是否有任何文件包含某些特定的詞組,我會使用

grep 'the phrase' mydir/*

有沒有什麼辦法來計算的總次數,這句話出現在這些文件?

我用grep 'the phrase' mydir/* --count

但是,想給的出現在每個單獨的文件,而不是總,這不是我想要的。

+0

Awk? Perl的?此外,你已經注意到,如果grep會突破線路,grep將會錯過你的短語,對吧? – dmckee

+0

如果該短語突破線條,那就不再是一個短語(在我的定義中)。所以是的,我意識到這一點。 –

回答

5

這應做到:

find mydir -print0 | xargs -0 grep 'the phrase' | wc -l 

find mydir -print0 - 找到的所有文件mydirectory中,並將它們打印爲空值終止線)

xargs -0 - 轉換空流終止行,並將它們轉換成報價分離的論點,例如「mydir/file 1」「mydir/file 2」...這些現在可以傳入grep的arlist列表中。

wc -l - 計數線

數量的空值終止的業務線是所有與否則這些可以看起來像多參數的grep有空格的文件創建工作圍繞做。

+0

只會計算包含該短語的行數;如果它在一行中分行或多行分行,則會被錯誤計數。 – geoffspear

+0

這是真的,雖然給OP什麼說他是用grep到現在爲止,這聽起來像他/她想要什麼.. – Benj

+0

@Benj:謝謝!這是完美的。這正是我需要的!但是我只是複製和粘貼這個東西,而沒有真正理解它背後的語義。 What're' -print0','xargs -0','wc -1'? –

0
grep 'the phrase' mydir/* --count | awk 'BEGIN { FS=":"; sum=0;} { sum = sum + $2; } END { print sum } ' 
1

這是比前兩種反應更簡單:

grep 'the phrase' mydir/* | wc -l 

的grep跨越相匹配的所有文件的輸出「MYDIR/*」,然後發送到廁所-l。