用GREP計算短語的出現次數用GREP計算短語的出現次數
我有一個包含一堆文件的目錄。所以,當我需要看是否有任何文件包含某些特定的詞組,我會使用
grep 'the phrase' mydir/*
有沒有什麼辦法來計算的總次數,這句話出現在這些文件?
我用grep 'the phrase' mydir/* --count
但是,想給的出現在每個單獨的文件,而不是總,這不是我想要的。
用GREP計算短語的出現次數用GREP計算短語的出現次數
我有一個包含一堆文件的目錄。所以,當我需要看是否有任何文件包含某些特定的詞組,我會使用
grep 'the phrase' mydir/*
有沒有什麼辦法來計算的總次數,這句話出現在這些文件?
我用grep 'the phrase' mydir/* --count
但是,想給的出現在每個單獨的文件,而不是總,這不是我想要的。
這應做到:
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有空格的文件創建工作圍繞做。
只會計算包含該短語的行數;如果它在一行中分行或多行分行,則會被錯誤計數。 – geoffspear
這是真的,雖然給OP什麼說他是用grep到現在爲止,這聽起來像他/她想要什麼.. – Benj
@Benj:謝謝!這是完美的。這正是我需要的!但是我只是複製和粘貼這個東西,而沒有真正理解它背後的語義。 What're' -print0','xargs -0','wc -1'? –
grep 'the phrase' mydir/* --count | awk 'BEGIN { FS=":"; sum=0;} { sum = sum + $2; } END { print sum } '
這是比前兩種反應更簡單:
grep 'the phrase' mydir/* | wc -l
的grep跨越相匹配的所有文件的輸出「MYDIR/*」,然後發送到廁所-l。
Awk? Perl的?此外,你已經注意到,如果grep會突破線路,grep將會錯過你的短語,對吧? – dmckee
如果該短語突破線條,那就不再是一個短語(在我的定義中)。所以是的,我意識到這一點。 –