GNU/Linux >> Znalost Linux >  >> Linux

Jak používat Awk a regulární výrazy k filtrování textu nebo řetězců v souborech

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:

  1. Obyčejné znaky například mezera, podtržítko(_), A–Z, a–z, 0–9.
  2. Meta znaky které jsou rozšířeny na běžné postavy, zahrnují:
    1. (.) odpovídá libovolnému jednotlivému znaku kromě nového řádku.
    2. (*) odpovídá nule nebo více existencím bezprostředního znaku, který mu předchází.
    3. [ 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.
    4. ^ odpovídá začátku řádku v souboru.
    5. $ odpovídá konci řádku v souboru.
    6. \ 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:

  1. [0-9] znamená jediné číslo
  2. [a-z] znamená shodu s jedním malým písmenem
  3. [A-Z] znamená shodu s jedním velkým písmenem
  4. [a-zA-Z] znamená shodu s jedním písmenem
  5. [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ářů.


Linux
  1. Jak extrahovat soubory .gz a .tar.gz v Linuxu

  2. Jak používat Netcat k přenosu souborů v systému Linux

  3. Jak používat Logrotate ke správě souborů protokolu

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

  2. Jak se regulární výrazy liší od zástupných znaků používaných k filtrování souborů?

  3. Jak sloučit dva soubory pomocí AWK?

  1. Jak nainstalovat a používat příkazy Nano Text Editoru v Linuxu

  2. Jak používat sed k vyhledání a nahrazení řetězce v souborech

  3. Jak používat příkaz Wireshark tshark pro vlastní porty a textové soubory