grep

Používání grep (a egrep) s regulárními výrazy

Používání grep (a egrep) s regulárními výrazy
Tento kurz popisuje, jak používat obojí grep (a egrep) to najít text v souborech, v jejich jednoduché formě a v kombinaci s regulárními výrazy. Obsahuje několik příklady a cvičení, Plus řešení, aby divák dokončil.

Název grep pochází z příkazu ed (a vim) „g / re / p“, což znamená globálně vyhledat daný regulární výraz a vytisknout (zobrazit) výstup.

Pravidelný Výrazy

Obslužné programy umožňují uživateli hledat v textových souborech řádky, které odpovídají regulárnímu výrazu (regulární výraz). Regulární výraz je vyhledávací řetězec složený z textu a jednoho nebo více z 11 speciálních znaků. Jednoduchým příkladem je shoda začátku řádku.

Ukázkový soubor

Základní forma grep lze použít k vyhledání jednoduchého textu v konkrétním souboru nebo souborech. Chcete-li vyzkoušet příklady, nejprve vytvořte ukázkový soubor.

Pomocí editoru, jako je nano nebo vim, zkopírujte níže uvedený text do souboru s názvem myfile.

xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

I když můžete příklady zkopírovat a vložit do textu (všimněte si, že uvozovky se nemusí správně kopírovat), aby se je správně naučily, je třeba zadat příkazy.

Než vyzkoušíte příklady, zobrazte ukázkový soubor:

$ cat myfile

Jednoduché vyhledávání

Chcete-li v souboru najít text „xyz“, postupujte takto:

$ grep xyz myfile

Používání barev

Chcete-li zobrazit barvy, použijte -color (dvojitá pomlčka) nebo jednoduše vytvořte alias. Například:

$ grep --color xyz myfile

nebo

$ alias grep = 'grep --color'
$ grep xyz myfile

Možnosti

Běžné možnosti používané s grep příkaz obsahuje:

Například:

$ grep -i xyz myfile # najít text bez ohledu na velikost písmen
$ grep -ic xyz myfile # počet řádků s textem
$ grep -in xyz myfile # zobrazit čísla řádků

Vytvořte více souborů

Než se pokusíte prohledat více souborů, nejprve vytvořte několik nových souborů:

$ echo xyz> myfile1
$ echo -e „xyz \ nxzz \ nXYZ“> můjsoubor2
$ echo -e „xxx \ nyyy“> můjsoubor3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Prohledat více souborů

Chcete-li vyhledat více souborů pomocí názvů souborů nebo zástupných znaků, zadejte:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep -in xyz my * 
# shodné názvy souborů začínající na „moje“

Cvičení I

  1. Nejprve spočítejte, kolik řádků je v souboru / etc / passwd.
Tip: použijte wc -l / etc / passwd
  1. Nyní najděte všechny výskyty textu var v souboru / etc / passwd.
  2. Zjistěte, kolik řádků v souboru obsahuje text
  3. Zjistěte, kolik řádků NENÍ v textu var.
  4. Najděte přihlašovací údaje v / etc / passwd

Řešení cvičení najdete na konci tohoto článku.

Používání regulárních výrazů

Příkaz grep lze také použít s regulárními výrazy pomocí jednoho nebo více z jedenácti speciálních znaků nebo symbolů k upřesnění vyhledávání. Regulární výraz je řetězec znaků, který obsahuje speciální znaky, které umožňují porovnávání vzorů v nástrojích, jako je grep, vim a sed. Řetězce může být nutné uvést v uvozovkách.

Mezi speciální znaky patří:

^ Začátek řádku
$ Konec řádku
. Libovolný znak (kromě \ n nového řádku)
* 0 nebo více předchozího výrazu
\ Předcházející symbol z něj dělá doslovný znak

Všimněte si, že *, které lze na příkazovém řádku použít k porovnání libovolného počtu znaků včetně žádného, ​​je ne používá se zde stejným způsobem.

Všimněte si také použití uvozovek v následujících příkladech.

Příklady

Vyhledání všech řádků začínajících textem pomocí znaku ^:

$ grep '^ xyz' myfile

Vyhledání všech řádků končících textem pomocí znaku $:

$ grep 'xyz $' myfile

Vyhledání řádků obsahujících řetězec pomocí znaků ^ i $:

$ grep '^ xyz $' myfile

Hledání řádků pomocí . aby odpovídala libovolnému znaku:

$ grep '^ x.můj soubor

Vyhledání řádků pomocí znaku *, který odpovídá 0 nebo více předchozím výrazům:

$ grep '^ xy * z' myfile

Najít řádky pomocí .* odpovídající 0 nebo více libovolným znakům:

$ grep '^ x.* z 'myfile

Hledání řádků pomocí \ uniknout znaku *:

$ grep '^ x \ * z' myfile

Chcete-li najít znak \ použijte:

$ grep '\\' myfile

Výraz grep - egrep

The grep příkaz podporuje pouze podmnožinu regulárních výrazů, které jsou k dispozici. Příkaz egrep:

Upozorňujeme, že výrazy musí být uzavřeny v uvozovkách.

Chcete-li použít barvy, použijte -color nebo znovu vytvořte alias:

$ alias egrep = 'egrep --color'

Za účelem vyhledávání více než jednoho regulární výraz the egrep příkaz může být napsán na více řádcích. To však lze provést také pomocí těchto speciálních znaků:

| Střídání, buď jedno, nebo druhé
(…) Logické seskupení části výrazu
$ egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Toto extrahuje řádky, které začínají kořenem, uucp nebo poštou ze souboru, | symbol, který znamená jednu z možností.

Následující příkaz bude ne práce, i když se nezobrazí žádná zpráva, protože základní grep příkaz nepodporuje všechny regulární výrazy:

$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Ve většině systémů Linux však příkaz grep -E je stejné jako použití egrep:

$ grep -E '(^ ​​root | ^ uucp | ^ mail)' / etc / passwd

Pomocí filtrů

Potrubí je proces odesílání výstupu jednoho příkazu jako vstupu do jiného příkazu a je jedním z nejsilnějších dostupných nástrojů Linuxu.

Příkazy, které se objevují v kanálu, se často označují jako filtry, protože v mnoha případech před odesláním upraveného streamu na standardní výstup projdou nebo upraví vstup, který jim byl předán.

V následujícím příkladu standardní výstup z je -l je předán jako standardní vstup do grep příkaz. Výstup z grep příkaz je poté předán jako vstup do více příkaz.

Zobrazí se pouze adresáře v /atd:

$ ls -l / etc | grep '^ d' | další

Následující příkazy jsou příklady použití filtrů:

$ ps -ef | grep cron

$ who | grep kdm

Ukázkový soubor

Chcete-li vyzkoušet cvičení kontroly, nejprve vytvořte následující ukázkový soubor.

Pomocí editoru, jako je nano nebo vim, zkopírujte níže uvedený text do souboru s názvem lidé:

Osobní J.Smith 25000
Osobní E.Smith 25400
Školení A.Hnědá 27500
Školení C.Prohlížet 23400
(Správce) R.Bron 30500
Goodsout T.Smyth 30000
Osobní F.Jones 25000
školení * C.Evans 25500
Goodsout W.Papež 30400
Přízemí T.Smythe 30500
Osobní J.Maler 33000

Cvičení II

  1. Zobrazte soubor lidé a prozkoumat jeho obsah.
  2. Najděte všechny řádky obsahující řetězec Kovář ve složce lidé.Tip: použijte příkaz grep, ale pamatujte, že se ve výchozím nastavení rozlišují velká a malá písmena.
  3. Vytvořte nový soubor npeople obsahující všechny řádky začínající řetězcem Osobní v souboru lidí.Tip: použijte příkaz grep s>.
  4. Potvrďte obsah souboru npeople vypsáním souboru.
  5. Nyní připojte všechny řádky tam, kde text končí řetězcem 500 v souboru lidé do souboru npeople.Tip: použijte příkaz grep s >>.
  6. Znovu potvrďte obsah souboru npeople vypsáním souboru.
  7. Najděte adresu IP serveru, který je uložen v souboru / etc / hosts.Tip: použijte příkaz grep s $ (název hostitele)
  8. Použití egrep extrahovat z / etc / passwd řádky účetního souboru obsahující lp nebo vaše vlastní uživatelské ID.

Řešení cvičení najdete na konci tohoto článku.

Více regulárních výrazů

Regulární výraz lze považovat za zástupné znaky na steroidech.

Existuje jedenáct znaků se zvláštním významem: úvodní a závěrečná hranatá závorka [], zpětné lomítko \, stříška ^, znak dolaru $, tečka nebo tečka ., symbol svislé čáry nebo potrubí |, otazník ?, hvězdička nebo hvězda *, znaménko plus + a úvodní a závěrečná kulatá závorka . Tyto speciální znaky se také často nazývají metaznaky.

Zde je celá sada speciálních znaků:

^ Začátek řádku
$ Konec řádku
. Libovolný znak (kromě \ n nového řádku)
* 0 nebo více předchozího výrazu
| Střídání, buď jedno, nebo druhé
[…] Výslovná sada odpovídajících znaků
+ 1 nebo více předchozích výrazů
? 0 nebo 1 předchozího výrazu
\ Předcházející symbol z něj dělá doslovný znak
Explicitní notace kvantifikátoru
(…) Logické seskupení části výrazu

Výchozí verze grep má pouze omezenou podporu regulárních výrazů. Aby všechny následující příklady fungovaly, použijte egrep místo toho nebo grep -E.

Hledání řádků pomocí | odpovídající jednomu z výrazů:

$ egrep 'xxz | xzz' můj soubor

Vyhledání řádků pomocí | pro shodu jednoho z výrazů v řetězci použijte také ():

$ egrep '^ x (Yz | yz)' můjsoubor

Vyhledání řádků pomocí [] k vyhledání libovolného znaku:

$ egrep '^ x [Yy] z' myfile

Chcete-li najít řádky pomocí [], aby NENÍ shodný žádný znak:

$ egrep '^ x [^ Yy] z' můjsoubor

Vyhledání řádků pomocí znaku *, který odpovídá 0 nebo více předchozím výrazům:

$ egrep '^ xy * z' myfile

Vyhledání řádků pomocí znaku +, který odpovídá 1 nebo více předchozím výrazům:

$ egrep '^ xy + z' myfile

Hledání řádků pomocí ? aby odpovídalo 0 nebo 1 předchozího výrazu:

$ egrep '^ xy?můj soubor

Cvičení III

  1. Najděte všechny řádky obsahující jména Evans nebo Maler ve složce lidé.
  2. Najděte všechny řádky obsahující jména Smith, Smyth nebo Smythe ve složce lidé.
  3. Najděte všechny řádky obsahující jména Brown, Browen nebo Bron ve složce lidé.Pokud máš čas:
  4. Najděte řádek obsahující řetězec (správce), včetně závorek v souboru lidé.
  5. Najděte řádek obsahující znak * v souboru people.
  6. Kombinujte 5 a 6 výše a najděte oba výrazy.

Další příklady

Najít řádky pomocí . a *, aby odpovídaly libovolné sadě znaků:

$ egrep '^ xy.* z 'myfile

Vyhledání řádků pomocí , aby odpovídaly N počtu znaků:

$ egrep '^ xy 3 z' myfile
$ egrep '^ xy 4 z' myfile

Vyhledání řádků pomocí k párování N nebo vícekrát:

$ egrep '^ xy 3, z' můjsoubor

Vyhledání řádků pomocí k párování N-krát, ale ne více než M-krát:

$ egrep '^ xy 2,3 z' můjsoubor

Závěr

V tomto kurzu jsme se nejprve podívali na použití grep v jeho jednoduché formě najdete text v souboru nebo ve více souborech. Poté jsme text, který má být vyhledán, zkombinovali s jednoduchými regulárními výrazy a poté s použitím složitějších egrep.

Další kroky

Doufám, že zde získané znalosti dobře využijete. Vyzkoušet grep příkazy na vaše vlastní data a pamatujte, že regulární výrazy, jak jsou zde popsány, lze použít ve stejné formě v vi, sed a awk!

Řešení cvičení

Cvičení I

Nejprve spočítejte, kolik řádků je v souboru / etc / passwd.
$ wc -l / etc / passwd
Nyní najděte všechny výskyty textu var v souboru / etc / passwd.
$ grep var / etc / passwd
Zjistěte, kolik řádků v souboru obsahuje text var

grep -c var / etc / passwd

Zjistěte, kolik řádků NENÍ v textu var.

grep -cv var / etc / passwd

Najděte přihlašovací údaje v / etc / passwd soubor
grep kdm / etc / passwd

Cvičení II

Zobrazte soubor lidé a prozkoumat jeho obsah.
$ kočičí lidé
Najděte všechny řádky obsahující řetězec Kovář v souboru lidé.
$ grep 'Smith' lidí
Vytvořte nový soubor, lidé, obsahující všechny řádky začínající řetězcem Osobní v lidé soubor
$ grep '^ Personal' people> npeople
Potvrďte obsah souboru lidé vypsáním souboru.
$ kočičí lidé
Nyní připojte všechny řádky tam, kde text končí řetězcem 500 v souboru lidé do souboru lidé.
$ grep '500 $' lidí >> lidé
Znovu potvrďte obsah souboru lidé vypsáním souboru.
$ kočičí lidé
Najděte adresu IP serveru, který je uložen v souboru / etc / hosts.
$ grep $ (název hostitele) / etc / hosts
Použití egrep extrahovat z / etc / passwd řádky účetního souboru obsahující lp nebo vaše vlastní ID uživatele.
$ egrep '(lp | kdm :)' / etc / passwd

Cvičení III

Najděte všechny řádky obsahující jména Evans nebo Maler v souboru lidé.
$ egrep 'Evans | Maler' lidé
Najděte všechny řádky obsahující jména Kovář, Smyth nebo Smythe v souboru lidé.
$ egrep 'Sm (i | y)?„lidi
Najděte všechny řádky obsahující jména Hnědý, Browen nebo Bron ve složce lidé.
$ egrep 'Brow?E?lidi
Najděte řádek obsahující řetězec (správce), včetně závorek v souboru lidé.

$ egrep '\ (Admin \)' lidí

Najděte řádek obsahující znak * ve složce lidé.
$ egrep '\ *' lidí
Kombinujte 5 a 6 výše a najděte oba výrazy.

$ egrep '\ (Admin \) | \ *' lidí


Jak používat Xdotool ke stimulaci kliknutí myší a klávesových zkratek v systému Linux
Xdotool je bezplatný a otevřený nástroj příkazového řádku pro simulaci kliknutí myší a stisknutí kláves. Tento článek se bude věnovat krátkému průvodc...
Top 5 ergonomických produktů pro počítačové myši pro Linux
Způsobuje dlouhodobé používání počítače bolest zápěstí nebo prstů? Trpíte ztuhlými klouby a neustále si musíte třást ruce? Cítíte pálivou bolest pokaž...
Jak změnit nastavení myši a touchpadu pomocí Xinput v Linuxu
Většina linuxových distribucí je ve výchozím nastavení dodávána s knihovnou „libinput“ pro zpracování vstupních událostí v systému. Může zpracovávat v...