grep

Hledání řetězců v textových souborech pomocí grepu s regulárním výrazem

Hledání řetězců v textových souborech pomocí grepu s regulárním výrazem
grep je jedním z nejpopulárnějších nástrojů pro vyhledávání a hledání řetězců v textovém souboru. Název 'grep' je odvozen od příkazu v nyní zastaralém nástroji editoru řádků edice Unix ed - příkaz ed pro vyhledávání globálně prostřednictvím souboru pro a regulární výraz a pak tisk ty řádky byly g / re / p, kde re byl regulární výraz, který byste použili. Nakonec byl napsán příkaz grep k provedení tohoto hledání v souboru, když nepoužíváte ed.

V tomto článku vám ukážeme, jak spustit vyhledávání řetězců pomocí Grepu s regulárním výrazem, a to tak, že vám poskytneme 10 praktických příkladů jeho implementací. Mnoho příkladů popsaných v tomto článku má praktické důsledky, což znamená, že je můžete použít při každodenním programování Linuxu. Následující ukázky popisují některé příklady regulárních výrazů pro běžně hledané vzory.

Příklad 1: Najděte samostatného charteru v textovém souboru

Chcete-li vypsat řádky v souboru „kniha“, které obsahují znak „$“, zadejte:

$ grep '\ $' kniha

Příklad 2: Najděte jeden řetězec v textovém souboru

Výstup řádků v souboru „kniha“, který obsahuje řetězec „14 $.99 ', typ:

$ grep '\ $ 14 \.99 'kniha

Příklad 3: Najděte jednoho zvláštního charteru v textovém souboru

Chcete-li vypsat řádky v souboru „kniha“, které obsahují znak „\“, zadejte:

$ grep '\\' kniha

Příklad 4: Odpovídající řádky začínající určitým textem

Použijte 'line' v regulárním výrazu k označení začátku řádku.

Chcete-li vypsat všechny řádky v řetězci „/ usr / dict / words“ začínající řetězcem „pro“, zadejte:

$ grep 'ˆpro' / usr / dict / slova

Chcete-li vypsat všechny řádky v souboru „kniha“, které začínají textem „na začátku“, bez ohledu na velikost písmen, zadejte:

$ grep -i Kniha „beginningna začátku“

POZNÁMKA: Tyto regulární výrazy byly citovány pomocí znaků; je to proto, že některé skořápky jinak považují znak „ˆ“ za speciální „metaznak“

Kromě vyhledávání slov a frází můžete pomocí grepu hledat složité textové vzory zvané regulární výrazy. Regulární výraz - nebo „regexp“ - je textový řetězec speciálních znaků, který určuje a soubor vzorů, které mají odpovídat.

Z technického hlediska jsou vzory slov nebo frází regulárními výrazy - jen velmi jednoduchými. V regulárním výrazu se většina znaků - včetně písmen a čísel - představuje sama. Například vzor regexp 1 odpovídá řetězci '1' a vzoru chlapec odpovídá řetězci 'boy'.

Existuje celá řada vyhrazených znaků nazývaných metaznaky, které se nepředstavují v regulárním výrazu, ale mají speciální význam, který se používá k vytváření složitých vzorů. Jedná se o následující metaznaky: ., *, [, ], ˆ, $ a \. Je dobré si uvědomit, že takové metaznaky jsou běžné téměř u všech běžných a speciálních distribucí Linuxu. Zde je dobrý článek, který pokrývá speciální významy metaznaků a uvádí příklady jejich použití.

Příklad 5: Odpovídající řádky končící určitým textem

Jako poslední znak citovaného textu použijte '$', aby se tento text shodoval pouze na konci řádku. Chcete-li vypsat řádky v souboru, který končí, končící vykřičníkem, zadejte:

$ grep '!$ 'jít

Příklad 6: Odpovídající řádky určité délky

Chcete-li spojit řádky určité délky, použijte tento počet '.'znaky mezi' ˆ 'a' $ '- například pro shodu všech řádků, které jsou široké dva znaky (nebo sloupce), použijte' ˆ ... $ 'jako regexp k vyhledání.

Chcete-li vypsat všechny řádky v '/ usr / dict / words', které mají přesně tři znaky, zadejte:

$ grep 'ˆ… $' / usr / dict / slova

U delších řádků je užitečnější použít jiný konstrukt: 'ˆ.\ number \ $ ', kde number je počet řádků, které mají odpovídat. Pomocí ',' zadejte rozsah čísel.

Chcete-li vypsat všechny řádky v '/ usr / dict / words', které jsou široké přesně dvanáct znaků, zadejte:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / slova

Chcete-li vypsat všechny řádky v '/ usr / dict / words', které mají šířku dvaadvacet nebo více znaků, zadejte:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / slova

Příklad 7: Odpovídající řádky, které obsahují některý z některých regulárních výrazů

Chcete-li porovnat řádky, které obsahují libovolný počet regexps, zadejte každý regexps, který chcete vyhledat mezi alternativními operátory ('\ |') jako regexp, který chcete vyhledat. Na výstupu budou řádky obsahující libovolný z daných regulárních výrazů.

Chcete-li zobrazit všechny řádky v 'playboy', které obsahují buď vzory 'kniha' nebo 'dort', zadejte:

$ grep 'kniha \ dort' playboy

Příklad 8: Odpovídající řádky, které obsahují všechny některé regulární výrazy

Výstup řádků, které se shodují Všechno z řady regexps použijte grep k výstupu řádků obsahujících první regexp, který chcete porovnat, a posuňte výstup na grep s druhým regexp jako argument. Pokračujte v přidávání kanálů k vyhledávání grep pro všechny regexps, které chcete hledat.

Chcete-li zobrazit všechny řádky v „seznamu skladeb“, který obsahuje jak vzory „the shore“, tak „sky“, bez ohledu na případ, zadejte:

$ grep - seznam skladeb 'the shore' | grep -i obloha

Příklad 9: Odpovídající řádky, které obsahují pouze určité znaky

Chcete-li porovnat řádky, které obsahují pouze určité znaky, použijte regexp 'ˆ [znaky] * $', kde znaky jsou ty, které se mají shodovat.  Chcete-li v řádku / usr / dict / words zobrazit výstupní řádky, které obsahují pouze samohlásky, zadejte:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / slova

Možnost '-i' odpovídá znakům bez ohledu na velikost písmen; v tomto příkladu se tedy všechny znaky samohlásky shodují bez ohledu na velikost písmen.

Příklad 10: Hledání frází bez ohledu na mezery

Jedním ze způsobů, jak vyhledat frázi, která se může vyskytnout s mezerami mezi slovy nebo přes konec řádku nebo stránky, je odebrat všechny vstupy řádků a mezery navíc ze vstupu a poté grep. Chcete-li to provést, připojte vstup k tr s argumentem "\ r \ n: \> \ | -" k možnosti '-d' (odstranění všech konců řádků ze vstupu); trubka, která do filtru fmt s možností '-u' (výstup textu s jednotnými mezerami); a potrubí, které grep se vzorem hledat.

Chcete-li hledat přes konce řádků řetězec „současně“ v souboru „docs“, zadejte:

$ kočičí dokumenty | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep „ve stejnou dobu jako“

souhrn

V tomto článku jsme přezkoumali 10 praktických příkladů použití příkazu Grep Linux pro vyhledávání a hledání řetězců v textovém souboru. Po cestě jsme se naučili, jak používat regulární výrazy ve spojení s Grepem k provádění komplexního vyhledávání v textových souborech. Nyní máte lepší představu o tom, jak výkonné jsou funkce vyhledávání v systému Linux.

Zde jsou další zdroje pro zájemce, kteří se chtějí dozvědět více o programování v systému Linux:

Zdroje pro správce systému

Zdroje pro programátory jádra Linuxu

Slovník systému souborů Linux

Komplexní přehled fungování systému souborů a adresářů systému Linux

Hry Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Jak zobrazit překrytí OSD v linuxových aplikacích a hrách na celou obrazovku
Hraní her na celou obrazovku nebo používání aplikací v režimu celé obrazovky bez rozptýlení vás mohou odříznout od příslušných systémových informací v...
Hry Top 5 karet pro zachycení hry
Top 5 karet pro zachycení hry
Všichni jsme viděli a milovali streamování her na YouTube. PewDiePie, Jakesepticye a Markiplier jsou jen někteří z nejlepších hráčů, kteří vydělali mi...
Hry Jak vyvíjet hru na Linuxu
Jak vyvíjet hru na Linuxu
Před deseti lety by jen málo uživatelů Linuxu předpovídalo, že jejich oblíbený operační systém bude jednoho dne populární herní platformou pro komerčn...