Úvod
grep
příkaz (zkratka pro G lobální R pravidelné E xpressions P rint) je výkonný nástroj pro zpracování textu pro prohledávání souborů a adresářů.
Když grep
je kombinován s regulárním výrazem (reg ulární ex zobrazení), pokročilé vyhledávání a filtrování výstupu se zjednoduší. Správci systému, vývojáři a běžní uživatelé těží ze zvládnutí regulárního výrazu pomocí grep
příkaz.
Tento průvodce vás naučí, jak grep
s regulárním výrazem prostřednictvím příkladů.
Předpoklady
- Přístup k terminálu/příkazovému řádku.
- Textový soubor k prohledávání. Příklady používají .bashrc soubor.
- Základní použití příkazu grep.
Regulární výraz Grep
Syntaxe pro grep
příkaz obsahuje regulární výrazy v následujícím formátu:
grep [regex] [file]
Regulární výrazy jsou jednoduché příkazy, které pomáhají filtrovat data a soubory. Mnoho příkazů Linuxu, jako je například příkaz awk nebo příkaz sed, také používá regulární výrazy k vyhledávání a manipulaci s informacemi.
Příkaz regulárního výrazu tvoří dva obecné typy znaků:
- Literály , což jsou standardní textové znaky.
- Speciální znaky nebo metaznaky mají zvláštní význam, pokud nejsou ukončeny zpětným lomítkem (
\
).
grep
příkaz nabízí tři možnosti syntaxe regulárního výrazu:
1. Základní regulární výraz (BRE )
2. Rozšířené regulární výrazy (ERE )
3. Regulární výrazy kompatibilní s Pearl (PCRE )
Ve výchozím nastavení grep
používá BRE syntaxe.
Příklad regulárního výrazu Grep
Spusťte následující příkaz a otestujte, jak grep regex funguje:
grep if .bashrc
Regulární výraz hledá řetězec znaků. Výsledek zobrazuje všechny případy, kde je písmeno i
se zobrazí a za ním f
v .bashrc soubor. Proto výstup zvýrazní následující výsledky:
- pokud
- elif
- nepokud y
- identif ying
Příkaz vrátí pouze ty řádky, kde je shoda.
Jak používat Regex s Grep
Regex nabízí mnoho možností, jak upřesnit vyhledávání pomocí grep
. Níže jsou uvedeny některé běžné příklady vysvětlující základní syntaxi a logiku. Kombinujte shody a vytvořte komplexní příkazy regulárního výrazu.
Doslovné shody
Doslovné shody provádějí přesnou shodu pro zadaný řetězec znaků. Předchozí vzorový výraz pro if
demonstruje doslovnou shodu.
Vyhledávání rozlišuje malá a velká písmena. Následující příkaz vrátí výsledky odlišné od předchozího příkladu:
grep If .bashrc
Chcete-li vyhledat více slov, přidejte uvozovky:
grep "if the" .bashrc
Vynechání uvozovek považuje druhé slovo za soubor nebo umístění.
Ukotvení
Shody kotev určují umístění čáry ve vyhledávání. Existují dva typy kotvy:
- Znak stříšky (
^
) vyhledá odpovídající řádky začínající zadaným výrazem. - Znak dolaru (
$
) vyhledá odpovídající řádky končící zadaným literálem.
Chcete-li například porovnat řádky začínající slovem alias
v .bashrc soubor, použijte:
grep ^alias .bashrc
Vyhledávání nezobrazuje řádky s tabulátory nebo mezerami před slovem.
Chcete-li porovnat řádky končící slovem then
v .bashrc soubor, spusťte:
grep then$ .bashrc
Použijte obě kotvy k vytvoření příkazu regulárního výrazu, který hledá jedno slovo nebo příkaz v řádku:
grep ^esac$ .bashrc
K nalezení prázdných řádků v souboru používejte pouze kotvy. Přidejte -n
možnost zobrazení čísel řádků ve výstupu:
grep -n ^$ .bashrc
Bez -n
možnost, výstup je prázdný.
Odpovídají libovolnému znaku
Období (.
) metaznak regulárního výrazu odpovídá libovolnému znaku na místě znaménka. Například:
grep r.o .bashrc
Výstup zobrazuje všechny výskyty písmene r
, následovaný libovolným znakem a následným o
. Tečkou může být jakýkoli znak, například písmeno, číslo, znak nebo mezera.
Přidejte několik teček k označení více zástupných znaků:
grep r..t .bashrc
Zkombinujte s porovnáváním kotvy a vytvořte komplexní příkaz regulárního výrazu. Například:
grep ..t$ .bashrc
Příkaz najde všechny řádky s libovolnými dvěma znaky, za nimiž následuje písmeno t
na konci.
Výrazy v závorce
Výrazy hranatých závorek umožňují shodu více znaků nebo rozsahu znaků na pozici. Například, aby odpovídaly všem řádkům, které obsahují and
nebo end
v .bashrc použijte následující vzor:
grep [ae]nd .bashrc
Výrazy hranatých závorek umožňují vyloučení znaků přidáním stříšky (^
) podepsat. Například, aby odpovídalo všemu kromě and
nebo end
, použijte:
grep [^ae]nd .bashrc
Pomocí výrazů hranatých závorek zadejte rozsah znaků přidáním pomlčky (-
) mezi prvním a posledním písmenem. Vyhledejte například všechny výskyty velkých písmen:
grep [A-Z] .bashrc
Zkombinujte výrazy v závorkách s kotvou, abyste našli všechna slova začínající velkými písmeny:
grep ^[A-Z] .bashrc
Výrazy hranatých závorek umožňují více rozsahů. Například všechny znaky, které nejsou písmeny, porovnejte s:
grep [^a-zA-Z] .bashrc
Výstup zvýrazní čísla a znaky a ignoruje všechna písmena.
Třídy postav
Grep nabízí standardní třídy znaků jako předdefinované funkce pro zjednodušení výrazů hranatých závorek. Níže je tabulka, která popisuje některé třídy a ekvivalent výrazu v závorce.
Syntaxe | Popis | Ekvivalentní |
---|---|---|
[[:alnum:]] | Všechna písmena a čísla. | "[0-9a-zA-Z]" |
[[:alpha:]] | Všechna písmena. | "[a-zA-Z]" |
[[:blank:]] | Mezery a karty. | [CTRL+V<TAB> ] |
[[:digit:]] | Číslice 0 až 9. | [0-9] |
[[:lower:]] | Malá písmena. | [a-z] |
[[:punct:]] | Interpunkce a další znaky. | "[^a-zA-Z0-9]" |
[[:upper:]] | Velká písmena. | [A-Z] |
[[:xdigit:]] | Šestnáctkové číslice. | "[0-9a-fA-F]" |
Úplný seznam tříd znaků grep je v manuálu grep.
Kvantifikátory
Kvantifikátory jsou metaznaky, které určují počet výskytů. Následující tabulka ukazuje syntaxi každého kvantifikátoru grep s krátkým popisem.
Syntaxe | Popis |
---|---|
* | Žádná nebo více shod. |
? | Nula nebo jedna shoda. |
+ | Jedna nebo více shod. |
{n} | n odpovídá. |
{n,} | n nebo více shod. |
{,m} | Až m odpovídá. |
{n,m} | Od n až m odpovídá. |
*
znak odpovídá vzoru nulakrát nebo vícekrát. Chcete-li předvést, spusťte následující příkaz:
grep m*and .bashrc
V tomto případě *
znak odpovídá písmenu m
nula nebo vícekrát. Proto „and
, mmand
, mmand
" jsou všechny shody. Písmeno m
zopakuje se libovolněkrát, když následuje znak *
podepsat.
Chcete-li najít nulu nebo přesně jednu shodu, použijte ?
podepsat. Uzavřete prohlášení do jednoduchých uvozovek a znak vynechejte, abyste se vyhnuli interpretaci. Například:
grep 'm\?and' .bashrc
Případně použijte rozšířené regulární výrazy, abyste se vyhnuli escapování:
grep -E 'm?and' .bashrc
Výstup zvýrazní všechny výskyty and
nebo mmand
.
K určení přesného počtu opakování použijte kvantifikátory rozsahu. Hledejte například řetězce se dvěma samohláskami:
grep '[aeiouAEIOU]\{2\}' .bashrc
grep -E '[aeiouAEIOU]{2}' .bashrc
Výstup zvýrazní všechna slova dvěma samohláskami.
Střídání
Střídání umožňuje definovat alternativní shody. Uzavřete alternativní řetězce do jednoduchých uvozovek a oddělte je pomocí svislé čáry (\|
).
Chcete-li například vyhledat slova bash
nebo alias
v .bashrc soubor, použijte:
grep 'bash\|alias' .bashrc
Případně použijte rozšířený regulární výraz a vynechejte znak escape:
grep -E 'bash|alias' .bashrc
Výstup zvýrazní obě instance řetězce v souboru.
Seskupování
Regulární výrazy umožňují seskupování vzorů do jedné položky. Umístěte skupinu do uvozených závorek pro běžný regulární výraz nebo použijte rozšířené.
Hledejte například řetězec bashrc
a vytvořte rc
znaky volitelné:
grep 'bash\(rc\)\?' .bashrc
grep -E 'bash(rc)?' .bashrc
Výstup zvýrazní všechny instance bashrc
. Od rc
je volitelný, příkaz také odpovídá slovu bash
.
Speciální výrazy zpětného lomítka
Příkaz grep nabízí několik jedinečných výrazů zpětného lomítka pro pokročilé porovnávání hranic slov. Níže je tabulka s krátkými příklady pro každý typ výrazu.
Syntaxe | Příklad | Shody (Tučný text představuje shodu) |
---|---|---|
\b | '\band\b' | a „a " \a \ |
\B | '\Band' | _a _a _ sa ha y |
\< | '\a | „a " a y a _ |
\> | 'and\>' | a "a" sa _a |
\w | '\wand' | _and _a _ ruka y písek |
\W | '\Wand' | "a " /a / |
\s | '\sand' | |
\S | '\Sand' | _and "a " písek ruka y _a _ /a / |
Použijte například \b
hranice k nalezení slova, které není součástí jiného slova:
grep '\bse[et]\b' .bashrc
Výraz vyhledá slova see
a set
. Hranice zajišťuje izolaci slov.
Unikající metaznaky
Escapování metaznaků považuje speciální znaky za literály. Chcete-li například vyhledat tečku (.) na konci řádku, uzavřete metaznak:
grep '\.$' .bashrc
Nepovolení interpretace znaků pomáhá při prohledávání zdrojového kódu nebo konfiguračních souborů.