Jste blízko. Chcete-li získat celkový počet všech výskytů „ha“ ve všech souborech .txt ve složce:
grep -o "ha" *.txt | wc -l
Od 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.
Funguje to, protože každý shoda je vytištěna na samostatném řádku, což umožňuje wc -l
spočítat je všechny.
Ve výchozím nastavení však grep najde pouze první výskyt na řádku a zobrazí celý řádek. Podobně možnost -c
najde pouze první výskyt ve všech řádcích a poté vypíše, kolik řádků mělo 1 (nebo více) shod.
UPRAVIT:
Zde je způsob, jak vytisknout celkový počet výskytů v každém jednotlivém souboru (s názvy souborů):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Vysvětlení:
find *.txt
- vyhledá soubory .txt
-printf
- vytiskne vše mezi jednoduchými uvozovkami (formátováno) na standardní výstup, přičemž nahradí výskyty %p
s výstupem find (názvy souborů)
$(grep -o "ha" %p | wc -l)
- funguje jako výše
| sh
- výstup z -printf
(což jsou příkazy) jsou přeneseny do shellu a provedeny
Všimněte si, že printf je pro každý soubor vyvolán jednou.
Místo použití grep
, zkuste použít ag -c ha
SilverSearcher:
1.txt:3
2.txt:1
Je to rychlejší! Pokud používáte ubuntu, můžete nainstalovat balíček silversearcher-ag
.