GNU/Linux >> Znalost Linux >  >> Linux

Počítání všech výskytů řetězce ve všech souborech ve složce

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 .


Linux
  1. sed začátečník:změna všech výskytů ve složce

  2. Jak změnit všechny výskyty slova ve všech souborech v adresáři

  3. Jak grepovat řetězec v adresáři a všech jeho podadresářích?

  1. Hledání řetězce ve více souborech v systému Linux

  2. Najděte všechny soubory starší než jedna minuta

  3. Hledání řetězce v řadě souborů v Linuxu

  1. Jak odebrat všechny soubory ve složce kromě jednoho konkrétního souboru v systému Linux

  2. Grep Word v souboru a pak zkopírujte soubor?

  3. Smazat všechny soubory ve složce kromě posledních (nejnovějších) 20?