GNU/Linux >> Znalost Linux >  >> Linux

Najděte text v souborech v systému Linux pomocí grep

Tento výukový program se zaměřuje na hledání textu v souborech pomocí příkazu grep a regulárních výrazů.

Při práci na systému Linux hledání textu v souborech je velmi běžný úkol, který každý den provádějí správci systému.

Možná budete chtít vyhledat konkrétní řádky v souboru protokolu za účelem řešení problémů se servery.

V některých případech vás zajímá hledání akcí prováděných konkrétními uživateli nebo chcete omezit řádky velkého souboru na několik řádků.

Naštěstí pro vás existuje několik způsobů, jak nalézt text v souborech v systému Linux ale nejoblíbenějším příkazem je příkaz grep.

Vyvinutý Kenem Thompsonem v počátcích Unixu, grep (g lobálně prohledejte r pravidelné e xpression a p nátisk ) používají správci systému po celém světě již více než 45 let.

V tomto tutoriálu se zaměříme na příkaz grep a jak nám to může pomoci efektivně najít text v souborech v celém našem systému.

Jste připraveni?

Syntaxe Grep v systému Linux

Jak je uvedeno výše, za účelem vyhledání textu v souborech v systému Linux , musíte použít příkaz grep s následující syntaxí

$ grep <option> <expression> <path>

Všimněte si, že možnosti a cesta jsou volitelné.

Než uvedeme seznam a podrobně popíšeme všechny možnosti, které poskytuje grep, pojďme si rychle zapamatovat syntaxi příkazu grep.

Abyste si zapamatovali syntaxi příkazu grep, nezapomeňte, že grep lze zapsat jako grEP což znamená, že výraz je před cestou.

Je to skvělý způsob, jak si zapamatovat syntaxi grep a syntaxi find zároveň, ale syntaxe find je přesný opak:nejprve cesta a potom výraz.

Rychlé příklady grep

Existují složité možnosti, které lze použít s grep, ale začněme sadou velmi rychlých příkladů.

Výpis uživatelů pomocí grep

V Linuxu, jak jej již pravděpodobně znáte, jsou uživatelské účty uvedeny ve specifickém souboru zvaném soubor passwd.

Chcete-li najít účet root v konkrétním souboru, jednoduše zadejte svůj text a soubor, ve kterém chcete hledat.

$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

Dalším velmi oblíbeným způsobem použití příkazu grep je vyhledání konkrétního procesu ve vašem systému Linux.

Filtrování procesů pomocí grep

Jak je vysvětleno v jednom z našich předchozích tutoriálů, musíte použít „ps ” k zobrazení seznamu všech procesů aktuálně spuštěných ve vašem systému.

Můžete použít „ps “ pomocí příkazu „grep ” pro filtrování procesů, které vás zajímají.

$ ps aux | grep <process>

Pokud vás zajímají například procesy bash, můžete zadat následující příkaz

$ ps aux | grep bash

root      1230  0.0  0.0  23068  1640 tty1     S+   Jan11   0:00 -bash
user      2353  0.0  0.1  23340  5156 pts/0    Ss   03:32   0:00 -bash
user      2473  0.0  0.0  14856  1056 pts/0    S+   03:45   0:00 grep --color=auto bash
user      6685  0.0  0.0  23140  1688 pts/2    Ss+  Nov09   0:00 bash

Poznámka :Pokud si nejste jisti, jak používat roury v Linuxu, zde je kompletní průvodce přesměrováním vstupu a výstupu.

Kontrola protokolů jádra Linux pomocí grep

Dalším skvělým využitím příkazu grep je kontrola kruhu vyrovnávací paměti linuxového jádra .

To se hojně využívá při provádění operací odstraňování problémů na systémech Linux, protože jádro při spouštění nebo zavádění zapisuje do svého bufferu.

Řekněme například, že jste do svého systému zavedli nový disk a nejste si jisti názvem tohoto nového disku.

Chcete-li tyto informace zjistit, můžete použít „dmesg ” a přesměrujte jej do příkazu grep.

$ dmesg | grep -E sd.{1}

Možnosti příkazu Grep

Příkaz grep je velmi užitečný sám o sobě, ale je ještě užitečnější, když je použit s volbami.

Příkaz grep doslova má spoustu různých možností.

Následující části budou sloužit jako vodítko pro správné použití těchto možností a na cestě budou uvedeny příklady.

Vyhledejte konkrétní řetězec pomocí grep

V některých případech vás může zajímat nalezení velmi specifického řetězce nebo textu v souboru.

Chcete-li omezit textové vyhledávání na konkrétní řetězec, musíte použít uvozovky před a za hledaným výrazem.

$ grep "This is a specific text" .

Pro ilustraci této možnosti předstírejme, že hledáte konkrétní uživatelské jméno ve vašem systému.

Protože mnoho uživatelských jmen může začínat stejnou předponou, musíte uživatele vyhledat pomocí uvozovek.

$ grep "devconnected" /etc/passwd

Vyhledejte text pomocí regulárních výrazů

Jednou z největších funkcí příkazu grep je schopnost vyhledávat text pomocí regulárních výrazů.

Regulární výrazy jsou rozhodně skvělým nástrojem pro zvládnutí:Umožňují uživatelům vyhledávat text na základě vzorů, jako je text začínající na konkrétní písmena nebo text, který lze definovat jako e-mailovou adresu.

Grep podporuje dva druhy regulárních výrazů:základní a rozšířeno regulární výrazy.

Základní regulární výrazy (BRE)

Hlavním rozdílem mezi základními a rozšířenými regulárními výrazy je skutečnost, že můžete použít symboly regulárních výrazů s BRE (základní regulární výrazy), ale bude jim muset předcházet zpětné lomítko.

Nejběžnější vzory regulárních výrazů jsou podrobně uvedeny níže s příklady:

  • ^ symbol :také nazývaný symbol stříšky, tento malý symbol klobouku se používá k definování začátku řádku. V důsledku toho se jakýkoli text za symbolem stříšky bude shodovat s řádky začínajícími tímto textem.

Chcete-li například najít všechny jednotky začínající na „sd“ (také nazývané disky SCSI), můžete použít symbol stříšky s grep.

$ lsblk | grep "^sb"
  • $ symbol :znak dolaru je opakem symbolu stříšky, používá se k definování konce řádku. V důsledku toho se shoda vzorů zastaví těsně před znakem dolaru. To je zvláště užitečné, když chcete cílit na konkrétní výraz.

Chcete-li vidět všechny uživatele, kteří mají bash shell ve vašem systému, můžete zadat následující příkaz

$ cat /etc/passwd | grep "bash$"
  • . (symbol tečky) :symbol tečky se používá ke shodě jednoho jediného znaku v regulárním výrazu. To může být zvláště užitečné, když hledané výrazy obsahují stejná písmena na začátku a na konci, ale ne uprostřed.

Pokud máte například ve svém systému dva uživatele, jednoho s názvem „bob“ a druhého s názvem „bab“, můžete oba uživatele najít pomocí symbolu tečky.

$ cat /etc/passwd | grep "b.b"
  • [ ] (symbol hranatých závorek) :Tento symbol se používá pouze pro shodu pouze s podmnožinou znaků. Pokud chcete najít shodu pouze se znaky „a“, „o“ nebo „e“, uzavřete je do hranatých závorek.

Zpět k příkladu „bob“, pokud chcete omezit vyhledávání na „bob“ a „bab“, můžete zadat následující příkaz

$ cat /etc/passwd | grep "b[ao]b"

Pomocí všech výše uvedených možností je možné izolovat jednotlivá slova v souboru:kombinací symbolu stříšky se symbolem dolaru.

$ grep "^word$" <file|path>

Naštěstí pro vás nemusíte tyto znaky zadávat pokaždé, když chcete hledat položky s jedním slovem.

Můžete použít „-w místo toho.

$ grep -w <expression> <file|path>

Rozšířené regulární výrazy (ERE)

Rozšířené regulární výrazy, jak uvádí jejich název, jsou regulární výrazy, které používají složitější výrazy, aby odpovídaly řetězcům.

Rozšířené regulární výrazy můžete použít k vytvoření výrazu, který bude odpovídat například e-mailové adrese.

Chcete-li najít text v souborech pomocí rozšířených regulárních výrazů, musíte použít možnost „-E“.

$ grep -E <expression> <path>

Jedním ze skvělých využití rozšířených regulárních výrazů je například schopnost vyhledávat více hledaných výrazů.

Vyhledávání více řetězců v souboru

Chcete-li vyhledat více řetězců v souboru, použijte „-E ” a oddělte různé hledané výrazy rovnými čarami (což znamená operátory OR v regulárních výrazech )

$ grep -E "text1|text2|text3" <path>

Zpět k našemu předchozímu příkladu grep můžete najít účet root a účet bob pomocí rozšířených regulárních výrazů.

$ grep -E "root|bob" /etc/passwd

Vyhledejte IP adresy pomocí grep

V některých případech můžete chtít izolovat IP adresy v jediném souboru:použití rozšířených regulárních výrazů je skvělý způsob, jak snadno najít IP adresy.

Mnoho různých webových stránek poskytuje regulární výrazy připravené k použití:tento budeme používat pro adresy IP.

"\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

Jak byste přečetli tento regulární výraz?

IP adresa se skládá ze 4 3místných čísel oddělených tečkami, přesně to popisuje tento regulární výraz.

([0-9]{1,3}\.){3}      = 3 3-digits numbers separated by dots

[0-9]{1,3}             = the last 3-digits number ending the IP address

Zde je návod, jak byste vyhledávali IP adresy pomocí příkazu grep

grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" <file|path>

Vyhledejte adresy URL pomocí grep

Podobně je zcela možné vyhledávat URL adresy v souboru, pokud denně pracujete s administrací webu.

Mnoho webových stránek opět poskytuje regulární výrazy pro adresy URL, ale my použijeme tento.

grep -E '(http|https)://[^/"]+' <file|path>

Vyhledejte e-mailové adresy pomocí grep

Konečně je možné vyhledávat e-mailové adresy pomocí rozšířených regulárních výrazů.

K vyhledání e-mailových adres použijete následující regulární výraz

grep -E "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" <file|path>

Nyní, když jste viděli, jak používat rozšířené regulární výrazy s grep, pojďme se podívat, jak můžete rekurzivně najít text v souboru pomocí voleb.

Najděte text rekurzivně pomocí grep

Abyste mohli najít text rekurzivně (to znamená prozkoumat každý adresář a jeho potomky) v Linuxu, musíte použít „grep“ s volbou „-r“ (pro rekurzivní)

$ grep -R <expression> <path>

Chcete-li například vyhledat všechny soubory obsahující slovo „log“ v adresáři /var/log, zadejte

$ grep -R "log$" /var/log

Při použití tohoto příkazu je velmi pravděpodobné, že uvidíte mnoho položek s odepřeným oprávněním.

Chcete-li ignorovat tyto položky odepřené oprávnění, přesměrujte výstup svého příkazu na /dev/null

$ grep -R "log$" /var/log 2> /dev/null

Chcete-li najít text rekurzivně, můžete také použít volbu „-d“ s akcí „rekurze“.

$ grep -d recurse "log$" /var/log

Rekurzivní vyhledávání textu může být velmi užitečné, když se snažíte najít konkrétní konfigurační soubory ve vašem systému.

Tisk čísel řádků pomocí grep

Jak můžete vidět v našich předchozích příkladech, dokázali jsme izolovat čáry odpovídající zadanému vzoru.

Pokud soubory obsahují tisíce řádků, bylo by bolestivé identifikovat soubor, ale ne číslo řádku.

Naštěstí pro vás má možnost grep možnost vytisknout čísla řádků spolu s různými shodami.

Chcete-li zobrazit čísla řádků pomocí grep, jednoduše použijte „-n “.

$ grep -n <expression> <path>

Vraťme se k našemu příkladu seznamu uživatelů, pokud chceme vědět, na kterém řádku jsou tyto položky, zadali bychom

$ grep -n -E "root|bob" /etc/passwd

Najděte text pomocí grep pomocí možnosti bez rozlišení malých a velkých písmen

V některých případech si nemusíte být jisti, zda je text psán velkými nebo malá písmena písmena.

Naštěstí pro vás má příkaz grep možnost vyhledávat text v souborech pomocí volby nerozlišující malá a velká písmena.

Chcete-li hledat text pomocí možnosti nerozlišovat malá a velká písmena, jednoduše použijte „-i “.

$ grep -i <expression> <path>

Vyloučit vzory z grep

Grep se používá jako způsob, jak identifikovat soubory obsahující konkrétní soubory, ale co kdybyste chtěli udělat přesný opak?

Co když chcete ve svém systému Linux najít soubory, které neobsahují konkrétní řetězec?

To je celý účel možnosti invertního vyhledávání grep.

Chcete-li vyloučit soubory obsahující konkrétní řetězec, použijte „grep“ s možností „-v“.

$ grep -v <expression> <file|path>

Jako malý příklad řekněme, že máte tři soubory, ale dva z nich obsahují slovo „log“.

Abyste tyto soubory vyloučili, museli byste provést invertní shodu s volbou „-v“.

Zobrazit názvy souborů pomocí grep

V některých případech vás nezajímá hledání textu uvnitř souborů, ale pouze jejich názvy souborů.

Chcete-li tisknout pouze názvy souborů a nikoli název souboru se skutečným výstupem, použijte volbu „-l“.

$ grep -l <expression> <path>

Při použití našeho předchozího příkladu bychom nezískali obsah souboru, ale pouze název souboru.

Závěr

V tomto tutoriálu jste se naučili, jak můžete snadno najít text v souborech v systému Linux.

Zjistili jste, že můžete použít mnoho různých možností:základní regulární výrazy nebo pokročilejší (rozšířené) regulární výrazy, chcete-li například shodovat IP adresy nebo telefonní čísla.

Také jste zjistili, že můžete provádět inverzní vyhledávání za účelem nalezení souborů ne odpovídající konkrétnímu vzoru ve vašem systému.

Pokud vás zajímá administrace systému Linux, máme na webu kompletní sekci, která se tomu věnuje, takže se určitě podívejte!


Linux
  1. Vytvářejte soubory pomocí příkazového řádku v Linuxu

  2. Příkaz Linux:Jak „najít“ pouze textové soubory?

  3. Jak v Linuxu najdu všechny soubory obsahující konkrétní text?

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

  2. Jak najít soubory obsahující dva řetězce dohromady v Linuxu?

  3. Linux:pomocí funkce find vyhledejte soubory starší než <datum>

  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  2. Použití linuxového příkazu find – Použití s ​​příklady

  3. Příkazy hledání pro Linux