Regulární výrazy
Stránky: | E-learning VŠCHT Praha |
Kurz: | Linux, shell |
Kniha: | Regulární výrazy |
Vytiskl(a): | Nepřihlášený host |
Datum: | neděle, 6. října 2024, 21.23 |
1. Regulární výrazy
Regulární výrazy (Regular Expressions - RE) jsou symbolické zápisy, které využívají speciálních znaků (metaznaků) k definici vzorů, které chceme najít v textu. V shellu je možné využít dva typy regulárních výrazů - základní regulární výrazy (Basic Regular Expressions - BRE) a rozšířené regulární výrazy (Extended Regular Expressions - ERE). Oba se liší v používané sadě metaznaků a ve významu a funkci některých z nich.
1.1. Základní regulární výrazy - BRE
Základní regulární výrazy (Basic Regular Expressions - BRE) využívají následující metaznaky ., *, ^, $, [, ]. Všechny ostatní znaky, které v definici BRE použijeme, jsou vnímány jako obyčejné znaky, tedy znaky bez speciálního významu či funkce.
Pro BRE platí jedno zásadní pravidlo. Pokud jsou metaznaky z ERE tzv. escapovány, tedy předchází jim únikový metaznak \, jsou chápané také jako metaznaky a dostávají svoji obvyklou funkci.
Význam a použití metaznaků viz kapitolu Význam metaznaků.
1.2. Rozšířené regulární výrazy - ERE
Rozšířené regulární výrazy (Extended Regular Expressions - ERE) využívají všechny metaznaky ze sady BRE, tedy metaznaky ., *, ^, $, [, ] a dále je tato sada rozšířena o metaznaky ?, +, {, }, (, ), |. Všechny ostatní znaky, které v definici ERE použijeme, jsou vnímány jako obyčejné znaky, tedy znaky bez speciálního významu či funkce.
Pro ERE platí jedno zásadní pravidlo. Pokud jsou metaznaky z ERE tzv. escapovány, tedy předchází jim únikový metaznak \, jsou chápané jako obyčejné znaky a ztrácí svoji obvyklou funkci.
Význam a použití metaznaků viz kapitolu Význam metaznaků.
2. Příkaz grep
Příkaz grep hledá v souborech nebo standardním vstupu řádky, které obsahují vzor zadaný pomocí regulárních výrazů. V základní podobě používá metaznaky BRE. Pomocí přepínače -E můžeme využít i metaznaky ERE, alternativně také pomocí příkazu egrep. Varianta příkazu fgrep, potlačí funkci všech metaznaků uvedených v regulárním výrazu.
Významné přepínače příkazu grep
přepínač | význam | |
---|---|---|
-i | potlačí rozlišování velkých a malých písmen
|
|
-v | zobrazí řádky, které neodpovídají zadanému vzoru
|
|
-n | každé řádce s nalezeným vzorem přidá číslo
|
|
-c | vrátí číslo počtu nalezených řádků
|
|
-l | vrátí jména souborů, které obsahují zadaný vzor
|
|
-h | potlačí výpis jmen souborů
|
3. Význam metaznaků
Příkaz grep lze v základní podobě použít s argumentem hledaného výrazu bez metaznaků. Jedná se o tzv. plain match, kdy dochází k vyhledání zadaného výrazu kdekoliv v každém řádku vstupu.
Metaznak ^ zajistí vyhledávání regulárního výrazu na začátku řádky.
Metaznak $ zajistí vyhledávání regulárního výrazu na konci řádky.
Metaznak . nahrazuje libovolný jeden znak.
Metaznaky [ ] slouží pro definici znaků a znakových tříd.
znaky |
|
význam |
---|---|---|
[abc] |
|
sada vybraných znaků
|
[^abc] |
|
negace sady vybraných znaků, tzn. všechny ostatní než uvedené
|
[a-e] |
|
sada znaků daná rozsahem
|
[^a-e] |
|
negace sady znaků dané rozsahem, tzn. všechny ostatní než uvedený rozsah |
znaková třída
|
|
význam |
---|---|---|
[:alpha:] |
|
písmena [A-Za-z]
|
[:lower:] |
|
malá písmena [a-z]
|
[:upper:] |
|
velká písmena [A-Z]
|
[:digit:] |
|
číslice [0-9]
|
[:alnum:] |
|
alfanumerické znaky [A-Za-z0-9]
|
[:word:] |
|
alfanumerické znaky a podtržítko [A-Za-z0-9_]
|
[:blank:] |
|
mezera atabelátor [ \t]
|
[:space:]
|
neviditelné znaky [ \t\r\n\v\f]
|
|
[:punct:]
|
interpunkční znaménka [-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~]
|
|
[:xdigit:]
|
hexadecimální číslice [A-Fa-f0-9]
|
Metaznaky ?, *, +, { } patří mezi tzv. kvantifikátory. Udávají počet výskytů předchozího uvedeného regulárního výrazu.
kvantifikátor | význam | |
---|---|---|
? | výraz se nevyskytuje nebo maximálně jednou
|
|
* | výraz se nevyskytuje nebo vícekrát
|
|
+ | výraz se vyskytuje minimálně jednou
|
|
{n} | výraz se vyskytuje přesně n-krát
|
|
{n,} | výraz se vyskytuje minimálně n-krát
|
|
{,m} | výraz se vyskytuje maximálně m-krát
|
|
{n,m} | výraz se vyskytuje minimálně n-krát a maximálně m-krát
|
Metaznak | slouží pro alternaci více definovaných regulárních výrazů.
Metaznaky ( ) slouží pro definici skupin regulárních výrazů. Na jednotlivé skupiny se lze v rámci zadaného výrazu odkazovat pomocí tzv. zpětných referencí (back references), které jsou indexovány od čísla jedna v pořadí, jak jsou definovány jednotlivé skupiny regulárních výrazů. Indexu zpětné reference vždy předchází únikový metaznak (zpětné lomítko).
Metaznak \ je tzv. únikový metaznak. Slouží pro potlačení či vyvolání obvyklé funkce různých metaznaků (viz rozdíl mezi BRE a ERE v úvodu této kapitoly). Příkladem použití jsou výše uvedené ukázky s příkazy grep a egrep.