Když spustíme určité příkazy v Unixu/Linuxu pro čtení nebo úpravu textu z řetězce nebo souboru, většinou se snažíme filtrovat výstup do dané sekce zájmu. Zde je použití regulárních výrazů užitečné.
Čtěte také: 10 užitečných linuxových řetězových operátorů s praktickými příklady
Co jsou regulární výrazy?
Regulární výraz lze definovat jako řetězce, které představují několik posloupností znaků. Jednou z nejdůležitějších věcí na regulárních výrazech je to, že umožňují filtrovat výstup příkazu nebo souboru, upravovat část textového nebo konfiguračního souboru a tak dále.
Funkce regulárního výrazu
Regulární výrazy jsou tvořeny:
- Obyčejné znaky například mezera, podtržítko(_), A–Z, a–z, 0–9.
- Meta znaky které jsou rozšířeny na běžné postavy, zahrnují:
(.)odpovídá libovolnému jednotlivému znaku kromě nového řádku.(*)odpovídá nule nebo více existencím bezprostředního znaku, který mu předchází.[ character(s) ]odpovídá kterémukoli ze znaků uvedených ve znaku (znakech), lze také použít pomlčku(-)znamená rozsah znaků, jako je[a-f],[1-5], a tak dále.^odpovídá začátku řádku v souboru.$odpovídá konci řádku v souboru.\je to úniková postava.
Chcete-li text filtrovat, musíte použít nástroj pro filtrování textu, jako je awk . Můžete si představit awk jako vlastní programovací jazyk. Ale pro rozsah tohoto návodu k použití awk , pokryjeme jej jako jednoduchý nástroj pro filtrování příkazového řádku.
Obecná syntaxe awk je:
# awk 'script' filename
Kde 'script' je sada příkazů, kterým rozumí awk a jsou spouštěny v souboru, názvu souboru.
Funguje tak, že načte daný řádek v souboru, vytvoří kopii řádku a poté na řádku provede skript. To se opakuje na všech řádcích v souboru.
'script' je ve tvaru '/pattern/ action' kde vzor je regulární výraz a akce je to, co awk udělá, když najde daný vzor v řádku.
Jak používat Awk Filtering Tool v Linuxu
V následujících příkladech se zaměříme na meta znaky, o kterých jsme hovořili výše v rámci funkcí awk.
Jednoduchý příklad použití awk:
Níže uvedený příklad vytiskne všechny řádky v souboru /etc/hosts protože není dán žádný vzor.
# awk '//{print}'/etc/hosts
Použít Awk se vzorem:
V příkladu níže je vzor localhost bylo zadáno, takže awk bude odpovídat řádku s localhost v /etc/hosts soubor.
# awk '/localhost/{print}' /etc/hosts
Použití Awk se zástupným znakem (.) ve vzoru
(.) bude odpovídat řetězcům obsahujícím loc , localhost , místní síť v příkladu níže.
To znamená * l some_single_character c * .
# awk '/l.c/{print}' /etc/hosts
Použití Awk se znakem (*) ve vzoru
Bude odpovídat řetězcům obsahujícím localhost , místní síť , řádky , schopný , jako v příkladu níže:
# awk '/l*c/{print}' /etc/localhost
Také si uvědomíte, že (*) se pokusí získat co nejdelší shodu, kterou dokáže detekovat.
Podívejme se na případ, který to demonstruje, vezměte regulární výraz t*t což znamená shodu řetězců začínajících písmenem t a končí t v řádku níže:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
Při použití vzoru /t*t/ získáte následující možnosti :
this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
A (*) v /t*t/ zástupný znak umožňuje awk vybrat poslední možnost:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Použití Awk se sadou [ znaků ]
Vezměte si například sadu [al1] , zde awk bude odpovídat všem řetězcům obsahujícím znak a nebo l nebo 1 na řádku v souboru /etc/hosts .
# awk '/[al1]/{print}' /etc/hosts
Následující příklad odpovídá řetězcům začínajícím buď K nebo k následuje T :
# awk '/[Kk]T/{print}' /etc/hosts
Určení znaků v rozsahu
Pochopte znaky pomocí awk:
[0-9]znamená jediné číslo[a-z]znamená shodu s jedním malým písmenem[A-Z]znamená shodu s jedním velkým písmenem[a-zA-Z]znamená shodu s jedním písmenem[a-zA-Z 0-9]znamená shodu s jedním písmenem nebo číslem
Podívejme se na příklad níže:
# awk '/[0-9]/{print}' /etc/hosts
Celý řádek ze souboru /etc/hosts obsahovat alespoň jedno číslo [0-9] ve výše uvedeném příkladu.
Používejte Awk s (^) Meta Character
Odpovídá všem řádkům, které začínají vzorem poskytnutým jako v příkladu níže:
# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
Používejte Awk s ($) metaznakem
Odpovídá všem řádkům, které končí zadaným vzorem:
# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
# awk '/rs$/{print}' /etc/hosts
Používejte Awk s (\) Escape znak
Umožňuje vám vzít postavu, která ji následuje, doslovně, to znamená považovat ji za takovou, jaká je.
V níže uvedeném příkladu první příkaz vytiskne celý řádek v souboru, druhý příkaz nevytiskne nic, protože chci odpovídat řádku, který má 25,00 $ , ale není použit žádný znak escape.
Třetí příkaz je správný, protože ke čtení $ byl použit znak escape jak to je.
# awk '//{print}' deals.txt
# awk '/$25.00/{print}' deals.txt
# awk '/\$25.00/{print}' deals.txt
Shrnutí
To není vše s awk nástroj pro filtrování příkazového řádku, příklady výše a základní operace awk. V dalších dílech pokročíme v tom, jak používat komplexní funkce awk. Děkujeme za přečtení a za jakékoli doplnění nebo vysvětlení napište komentář do sekce komentářů.