Příkaz grep je ve své nejzákladnější podobě vyhledávacím nástrojem. Na rozdíl od funkce find or locate se neomezuje na hledání názvů souborů; nejčastěji se používá k hledání určitého řetězce textu v obsahu souboru. Jako výstup grep zobrazí každý celý řádek souboru, ve kterém byl nalezen váš vyhledávací vzor. Tímto způsobem můžete použít grep ke zpracování textového souboru i ke čtení obsahu, který se vás nejvíce týká. Můžete například chtít auditovat události přihlášení uživatele pohledem do protokolu přístupu. Místo čtení celého protokolu nebo procházení hledaného výrazu v textovém editoru můžete jednoduše vytisknout všechny relevantní řádky na obrazovku pomocí příkazu grep.
Syntaxe
Syntaxe příkazu grep je:
# grep [options] {search pattern} {file names}
Použití grep k nalezení souborů
Kromě prohledávání obsahu souborů můžete použít grep k prohledání adresáře za účelem nalezení určitého souboru. ls -l | Příkaz grep audit vrací dlouhý seznam všech souborů v aktuálním adresáři, jejichž název obsahuje „audit“.
Pokud chcete obrátit vyhledávání (výstupní řádky, které neodpovídají vzoru), použijte parametr -v:
$ grep -v t file1 one four five $
Pokud potřebujete najít čísla řádků, kde se nacházejí odpovídající vzory, použijte parametr -n:
$ grep -n t file1 2:two 3:three $
Pokud potřebujete pouze zjistit, kolik řádků obsahuje odpovídající vzor, použijte parametr -c:
$ grep -c t file1 2 $
Pokud potřebujete zadat více než jeden odpovídající vzor, použijte parametr -e k určení každého jednotlivého vzoru:
$ grep -e t -e f file1 two three four five $
Pokud při spouštění příkazu grep narazíte na níže uvedenou chybu:
grep: command not found
můžete zkusit nainstalovat níže uvedený balíček podle vaší volby distribuce:
Distribuce OS | Příkaz |
---|---|
OS X | brew install grep |
Debian | apt-get install grep |
Ubuntu | apt-get install grep |
Alpine | apk přidat grep |
Arch Linux | pacman -S grep |
Kali Linux | apt-get install grep |
CentOS | yum install grep |
Fedora | instalace dnf grep |
Raspbian | apt-get install grep |
Příklady příkazů grep
1. Chcete-li interpretovat PATTERN jako rozšířený regulární výraz:
# grep --extended-regexp PATTERN # grep -E PATTERN
2. Chcete-li interpretovat PATTERN jako seznam pevných řetězců:
# grep -F PATTERN # grep --fixed-strings PATTERN
3. Chcete-li interpretovat PATTERN jako základní regulární výraz:
# grep -G PATTERN # grep --basic-regexp PATTERN
4. Chcete-li interpretovat PATTERN jako regulární výraz Perlu:
# grep -P PATTERN # grep --perl-regexp PATTERN
5. Chcete-li jako vzor použít PATTERN:
# grep -e PATTERN, # grep --regexp=PATTERN
6. Chcete-li získat vzory ze FILE, jeden na řádek:
# grep -f FILE, --file=FILE
7. Chcete-li ignorovat rozlišení velkých a malých písmen jak ve PATTERN, tak ve vstupních souborech:
# grep -i PATTERN # grep --ignore-case PATTERN
8. Chcete-li obrátit smysl shody, vyberte neodpovídající řádky:
# grep -v PATTERN # grep --invert-match PATTERN
9. Chcete-li vybrat pouze řádky obsahující shody, které tvoří celá slova:
# grep -w PATTERN # grep --word-regexp PATTERN
10. Chcete-li vybrat pouze ty shody, které přesně odpovídají celému řádku:
# grep -x PATTERN # grep --line-regexp PATTERN
11. Ignorování velikosti písmen:
# grep -y PATTERN
12. Potlačení normálního výstupu; místo toho vytiskněte počet odpovídajících řádků:
# grep -c PATTERN # grep --count PATTERN
13. Barevné zobrazení:
# grep --color PATTERN
14. Potlačení normálního výstupu; místo toho vytiskněte název každého vstupního souboru, ze kterého se neočekává:
# grep -L # grep --files-without-match
15. Potlačení normálního výstupu; místo toho vypište název každého vstupního souboru, ze kterého byl vytištěn výstup:
# grep -l # grep --files-with-matches
16. Do klidu; nezapisovat nic na standardní výstup Okamžitě opustit s nulovým stavem, pokud je nalezena jakákoliv shoda:
# grep -q # grep --quiet # grep --silent
17. Chcete-li zastavit čtení souboru po NUM odpovídajících řádcích:
# grep -m NUM # grep --max-count=NUM
18. Chcete-li vytisknout pouze shodné (neprázdné) části shodného řádku:
# grep -o PATTERN # grep --only-matching PATTERN
19. Chcete-li potlačit chybové zprávy o neexistujících nebo nečitelných souborech:
# grep -s PATTERN # grep --no-messages PATTERN
20. Tisk bajtového offsetu založeného na 0 ve vstupním souboru před každým řádkem výstupu:
# grep -b PATTERN # grep --byte-offset PATTERN
21. Tisk názvu souboru pro každou shodu:
# grep -H PATTERN # grep --with-filename PATTERN
22. Chcete-li potlačit předponu názvů souborů na výstupu:
# grep -h PATTERN # grep --no-filename PATTERN
23. To Display vstup skutečně pocházející ze standardního vstupu jako vstup pocházející ze souboru LABEL:
# grep -cd PATTERN | grep --label=mysearch -H PATTERN
24. Chcete-li předřadit každému řádku výstupu číslo řádku založeného na 1 v jeho vstupním souboru:
# grep -n PATTERN # grep --line-number PATTERN
25. Chcete-li se ujistit, že první znak skutečného obsahu řádku leží na zarážce tabulátoru:
# grep -T PATTERN # grep --initial-tab PATTERN
26. Chcete-li hlásit odchylky bajtů ve stylu Unix:
# grep -u PATTERN # grep --unix-byte-offsets PATTERN
27. Pro Výstup nulového bajtu místo znaku, který normálně následuje za názvem souboru:
# grep -Z PATTERN # grep --null PATTERN
28. Chcete-li po odpovídajících řádcích vytisknout NUM řádků kontextu na konci:
# grep -A NUM PATTERN # grep --after-context=NUM PATTERN
29. Chcete-li vytisknout NUM řádků úvodního kontextu před odpovídajícími řádky:
# grep -B NUM PATTERN # grep --before-context=NUM PATTERN
30. Chcete-li vytisknout NUM řádků výstupního kontextu:
# grep -C NUM PATTERN # grep --context=NUM PATTERN
31. Chcete-li zpracovat binární soubor, jako by to byl text:
# grep -a PATTERN /tmp/bin # grep -text PATTERN /tmp/bin
32. Předpokládejme, že soubor je typu TYPE:
# grep --binary-files=TYPE PATTERN
33. Pro Pokud je vstupním souborem zařízení, FIFO nebo zásuvka, zpracujte jej pomocí AKCE:
# grep -D ACTION PATTERN # grep --devices=ACTION PATTERN
34. Komu Pokud je vstupním souborem adresář, použijte ke zpracování AKCI:
# grep -d ACTION PATTERN # grep --directories=ACTION PATTERN
35. Chcete-li přeskočit soubory, jejichž základní název odpovídá GLOB:
# grep --exclude=GLOB PATTERN
36. Chcete-li přeskočit soubory, jejichž základní název se shoduje s kterýmkoli z globů názvů souborů načtených z FILE:
# grep --exclude-from=FILE PATTERN
37. Chcete-li vyloučit adresáře odpovídající vzoru DIR z rekurzivního vyhledávání:
# grep --exclude-dir=DIR PATTERN
38. Chcete-li zpracovat binární soubor, jako by neobsahoval odpovídající data:
# grep -I PATTERN
39. Chcete-li hledat pouze soubory, jejichž základní název odpovídá GLOB:
# grep --include=GLOB
40. Chcete-li číst všechny soubory v každém adresáři, rekurzivně:
# grep -r PATTERN # grep -R PATTERN
41. Použití ukládání do vyrovnávací paměti na výstupu:
# grep --line-buffered PATTERN
42. Pokud je to možné, použijte ke čtení vstupu systémové volání mmap namísto výchozího čtení:
# grep --mmap PATTERN
43. Chcete-li považovat soubor(y) za binární:
# grep -U /tmp/file PATTERN # grep --binary /tmp/file PATTERN
44. Chcete-li zacházet se vstupem jako se sadou řádků:
# grep -z PATTERN # grep --null-data PATTERN
45. Zobrazení nápovědy:
# grep -h
46. Chcete-li vytisknout číslo verze grep:
# grep -V