GNU/Linux >> Znalost Linux >  >> Linux

Jak používat příkaz Grep k vyhledání textu v souborech

Linux a systémy podobné UNIXu jsou všechny informace o konfiguraci systému uloženy a manipulovány ve formě prostého textu. Hledání textu by tedy bylo velmi častým úkolem pro úpravy a analýzu protokolů.

Příkaz grep umožňuje vyhledávat text nebo řetězec v souboru nebo z výstupní konzole příkazu, termín nebo vzor vyhovující regulárním výrazům. Když grep najde shodu v řádku, zkopíruje výsledky na obrazovku, tj. stdout.

V tomto tutoriálu se s praktickými příklady naučíme používat příkaz grep.

Příkaz Grep

Než začneme vysvětlovat jeho použití, podívejme se na syntaxi příkazu grep.

grep [OPTIONS] PATTERN [FILE...]

Podrobně probereme nejběžnější možnosti a vzory grep, které můžeme použít pro vyhledávání.

Jak hledat řetězec v souboru

V níže uvedeném příkladu grep hledá v souboru /etc/passwd řetězec 'root' a přesměrovaný výstup na stdout.

$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

Vyhledávání textu z více souborů

Pomocí následujícího příkazu můžete vyhledat konkrétní text z více souborů:

$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root

Vyhledávání bez ohledu na velikost písmen Grep

Možnosti -i vyhledává daný řetězec/vzor necitlivě.

V následujících příkladech grep odpovídá všem slovům jako „hal“, „HAL“ bez ohledu na velikost písmen:

$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

Rekurzivní vyhledávání

Rekurzivního vyhledávání je dosaženo pomocí -r možnost, která bude prohledávat rekurzivně všechny soubory a přeskakovat symbolické odkazy. Pokud chcete zahrnout symbolické odkazy, použijte -R .

V následujícím příkladu bude příkaz grep hledat řetězec 'ngnix' ve všech souborech v /var adresář.

$ grep -r nginx /var

Vyhledejte řetězec ve výstupu příkazu (stdout)

Můžete použít výstup roura pro příkaz a grep pro vzor z jeho výstupu.

V následujícím příkladu hledám soubor s názvem 'backup' pomocí příkazu ls

$ ls | grep backup

Zde dělám více kanálů a hledám proces 'docker' a 'apache' z příkazu ps.

$ ps -ef | grep docker | grep apache

Regulární výrazy v souborech

Regulární výrazy jsou vzor pro každý vstupní řádek. Basic a Extended jsou dva regulární výrazy používané příkazem grep.

Základní regulární výraz

Ve výchozím nastavení grep interpretuje vzor jako základní regulární výraz.

Symbol ^ (stříška) – Vzor, který za ním následuje, se musí vyskytovat na začátku každého řádku. V následujícím příkladu se řetězec ^welcome bude shodovat, pouze pokud se vyskytuje na samém začátku řádku.

$ grep “^welcome” filename

Rozšířený regulární výraz

Použijte -E (nebo --extended-regexp), pokud chcete, aby to grep chápal jako rozšířený regulární výraz.

Následující příkaz extrahuje všechny odkazy ze souboru

$ grep –Eoi '<a[^>]+>.*</a>' filename

o :Ve výchozím nastavení grep vytiskne celý řádek, který obsahuje vyhledávací vzor. Tato volba dává příkazu grep pokyn, aby vytiskl pouze odpovídající slova namísto celého řádku.

i :Tato volba požádá příkaz grep, aby ignoroval velká a malá písmena při porovnávání vzoru.

Vyhledejte celé slovo pomocí grep

-w příznak (word-regexp) pro grep způsobí, že daný výraz bude odpovídat pouze celým slovům.

$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:

Zobrazení řádků po shodě řetězce

-A možnost, která zobrazí N řádků po shodě řetězce.

$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

Zobrazení řádků před shodou řetězce

Můžeme použít -B možnost zobrazení N řádků před řetězcem pro daný soubor

$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Hledat více řetězců

Můžeme vyhledávat více vzorů nebo řetězců pomocí operátoru OR | a \| . -E (extended-regexp) určuje, zda je potřeba ukončit určité speciální znaky. -e je striktně příznak pro označení vzoru, se kterým chcete porovnávat.

Příklad 1:použití volby -E

$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh

Nebo

$ grep -E "foo|bar" *.txt

Příklad 2:bez -E

$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh

Nebo

$ grep "foo\|soul\|bar" *.txt

Vyloučit konkrétní soubor z vyhledávání

Pro ignorování hledání můžete použít volbu -v. Následující příkaz vyhledá řetězec 'error' ve všech souborech kromě 'syslog.log'

$ grep -r error * | grep -v ‘/\syslog.log/’

Závěr

V tomto tutoriálu jsme se naučili používat příkaz grep k vyhledání textu v souborech. Doufám, že se vám toto čtení líbilo a zanechte prosím své návrhy v sekci komentářů níže.


Linux
  1. Jak najít všechny soubory, které neobsahují textový řetězec?

  2. Jak najít více řetězců v souborech?

  3. Příkaz Linux:Jak „najít“ pouze textové soubory?

  1. Jak používat Linuxový příkaz grep

  2. Jak najít textové soubory, které neobsahují text v Linuxu?

  3. Jak použít příkaz find k odstranění souborů odpovídajících vzoru?

  1. Jak používat příkaz grep v Linuxu/UNIXu

  2. Jak používat Linuxový příkaz find k hledání souborů

  3. Jak v Linuxu najdu všechny soubory obsahující konkrétní text?