Sei vicino. Per ottenere un conteggio totale di tutte le occorrenze di "ha" all'interno di tutti i file .txt in una cartella:
grep -o "ha" *.txt | wc -l
Da man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Funziona perché ciascuno match viene stampato su una riga separata, consentendo così wc -l
contarli tutti.
Per impostazione predefinita, tuttavia, grep trova solo la prima occorrenza su una riga e restituisce l'intera riga. Allo stesso modo, opzione -c
trova solo la prima occorrenza in tutte le righe, quindi mostra quante righe hanno avuto 1 (o più) corrispondenze.
MODIFICA:
Ecco un modo per stampare il numero totale di occorrenze all'interno di ogni singolo file (con i nomi dei file):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Spiegazione:
find *.txt
- trova i file .txt
-printf
- stampa tutto tra le virgolette singole (formattate) sullo standard output, sostituendo le occorrenze di %p
con l'output di find (nomi file)
$(grep -o "ha" %p | wc -l)
- funziona come sopra
| sh
- l'output da -printf
(che sono comandi) vengono reindirizzati a una shell ed eseguiti
Nota che printf viene invocato una volta per nome file.
Invece di usare grep
, prova a usare ag -c ha
SilverSearcher:
1.txt:3
2.txt:1
È più veloce! Se stai usando Ubuntu, puoi installare il pacchetto silversearcher-ag
.