Ú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ů.