grep

Používanie grep (a egrep) s regulárnymi výrazmi

Používanie grep (a egrep) s regulárnymi výrazmi
V tomto výučbe sa dozviete, ako používať obe možnosti grep (a egrep) to nájsť text v súboroch, v ich jednoduchej podobe a v kombinácii s regulárnymi výrazmi. Obsahuje niekoľko príklady a cviky, plus riešenia, aby divák dokončil.

Názov grep pochádza z príkazu ed (a vim) „g / re / p“, čo znamená globálne vyhľadať daný regulárny výraz a vytlačiť (zobraziť) výstup.

Pravidelné Výrazy

Obslužné programy umožňujú používateľovi vyhľadávať v textových súboroch riadky, ktoré sa zhodujú s regulárnym výrazom (regexp). Regulárny výraz je vyhľadávací reťazec zložený z textu a jedného alebo viacerých z 11 špeciálnych znakov. Jednoduchým príkladom je zhoda začiatku riadku.

Ukážkový súbor

Základná forma grep môžu byť použité na vyhľadanie jednoduchého textu v konkrétnom súbore alebo súboroch. Ak chcete vyskúšať príklady, najskôr vytvorte vzorový súbor.

Na kopírovanie textu nižšie do súboru s názvom použite editor ako nano alebo vim myfile.

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

Aj keď môžete príklady z textu skopírovať a prilepiť (všimnite si, že dvojité úvodzovky sa nemusia správne skopírovať), aby ste sa ich správne naučili, musíte zadávať príkazy.

Pred vyskúšaním príkladov si pozrite ukážkový súbor:

$ macísúbor

Jednoduché vyhľadávanie

Ak chcete v súbore nájsť text „xyz“, postupujte takto:

$ grep xyz myfile

Používanie farieb

Ak chcete zobraziť farby, použite -color (dvojitá pomlčka) alebo jednoducho vytvorte alias. Napríklad:

$ grep - farebný xyz môj súbor

alebo

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

možnosti

Bežné možnosti používané s grep príkaz obsahuje:

Napríklad:

$ grep -i xyz myfile # nájsť text bez ohľadu na veľkosť písmen
$ grep -ic xyz myfile # počet riadkov s textom
$ grep -in xyz myfile # zobraziť čísla riadkov

Vytvorte viac súborov

Predtým, ako sa pokúsite prehľadať viac súborov, najskôr vytvorte niekoľko nových súborov:

$ echo xyz> myfile1
$ echo -e „xyz \ nxzz \ nXYZ“> môj súbor2
$ echo -e „xxx \ nyyy“> myfile3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Vyhľadávanie vo viacerých súboroch

Ak chcete prehľadávať viac súborov pomocou názvov súborov alebo zástupných znakov, zadajte:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep -in xyz my * 
# zhody súborov začínajúcich sa na „moje“

Cvičenie I

  1. Najskôr spočítajte, koľko riadkov je v súbore / etc / passwd.
Rada: použite wc -l / etc / passwd
  1. Teraz nájdite všetky výskyty textu var v súbore / etc / passwd.
  2. Nájdite, koľko riadkov v súbore obsahuje text
  3. Zistite, koľko riadkov NIE obsahuje text var.
  4. Nájdite položku pre svoje prihlásenie v / etc / passwd

Riešenie cvičení nájdete na konci tohto článku.

Používanie regulárnych výrazov

Príkaz grep sa dajú použiť aj s regulárnymi výrazmi pomocou jedného alebo viacerých z jedenástich špeciálnych znakov alebo symbolov na spresnenie vyhľadávania. Regulárny výraz je reťazec znakov, ktorý obsahuje špeciálne znaky, ktoré umožňujú priraďovanie vzorov v rámci nástrojov, ako sú grep, vim a sed. Upozorňujeme, že reťazce bude možno potrebné uviesť v úvodzovkách.

Medzi špeciálne znaky patria:

^ Začiatok riadku
$ Koniec riadku
. Ľubovoľný znak (okrem \ n nového riadku)
* 0 alebo viac predchádzajúceho výrazu
\ Predchádzajúci symbol z neho robí doslova znak

Upozorňujeme, že znak *, ktorý je možné v príkazovom riadku použiť na priradenie ľubovoľného počtu znakov vrátane žiadnych, je nie používa sa tu rovnako.

Upozorňujeme tiež na použitie úvodzoviek v nasledujúcich príkladoch.

Príklady

Vyhľadanie všetkých riadkov začínajúcich textom pomocou znaku ^:

$ grep '^ xyz' myfile

Vyhľadanie všetkých riadkov končiacich textom pomocou znaku $:

$ grep 'xyz $' myfile

Vyhľadanie riadkov obsahujúcich reťazec obsahujúcich znaky ^ aj $:

$ grep '^ xyz $' myfile

Vyhľadanie riadkov pomocou . aby zodpovedal ľubovoľnému znaku:

$ grep '^ x.môj súbor

Vyhľadanie riadkov pomocou znaku *, ktorý zodpovedá 0 alebo viacerým predchádzajúcim výrazom:

$ grep '^ xy * z' myfile

Vyhľadanie riadkov pomocou .* aby zodpovedali 0 alebo viac ľubovoľným znakom:

$ grep '^ x.* z 'môjsúbor

Vyhľadanie riadkov pomocou \ uniknúť znaku *:

$ grep '^ x \ * z' myfile

Ak chcete vyhľadať znak \, použite:

$ grep '\\' myfile

Výraz grep - egrep

The grep príkaz podporuje iba podmnožinu dostupných regulárnych výrazov. Avšak príkaz egrep:

Upozorňujeme, že výrazy musia byť uzavreté v úvodzovkách.

Ak chcete použiť farby, použite -color alebo znova vytvorte alias:

$ alias egrep = 'egrep --color'

Aby bolo možné vyhľadať viac ako jeden regulárny výraz the egrep príkaz môže byť napísaný na viacerých riadkoch. Môžete to však urobiť aj pomocou týchto špeciálnych znakov:

| Striedanie, jedno alebo druhé
(…) Logické zoskupenie časti výrazu
$ egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Týmto sa zo súboru, |, extrahujú riadky, ktoré začínajú koreňom, uucp alebo poštou symbol, ktorý znamená jednu z možností.

Nasledujúci príkaz bude nie práca, aj keď sa nezobrazuje žiadna správa, od zákl grep príkaz nepodporuje všetky regulárne výrazy:

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

Avšak na väčšine systémov Linux príkaz grep -E je to isté ako použitie egrep:

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

Pomocou filtrov

Potrubie je proces odosielania výstupu jedného príkazu ako vstupu do iného príkazu a je jedným z najsilnejších dostupných nástrojov Linuxu.

Príkazy, ktoré sa objavia v potrubí, sa často označujú ako filtre, pretože v mnohých prípadoch pred odoslaním upraveného toku na štandardný výstup preosejú alebo upravia vstup, ktorý im bol odovzdaný.

V nasledujúcom príklade je štandardný výstup z ls -l sa odovzdáva ako štandardný vstup do grep príkaz. Výstup z grep príkaz je potom odovzdaný ako vstup do viac príkaz.

Týmto sa zobrazia iba adresáre v priečinku /atď:

$ ls -l / etc | grep '^ d' | viac

Nasledujúce príkazy sú príkladmi použitia filtrov:

$ ps -ef | grep cron

$ who | grep kdm

Ukážkový súbor

Ak si chcete vyskúšať preskúmanie, najskôr vytvorte nasledujúci vzorový súbor.

Na kopírovanie textu nižšie do súboru s názvom použite editor ako nano alebo vim ľudia:

Osobné J.Smith 25000
Osobné E.Smith 25400
Školenie A.Hnedá 27500
Školenie C.Browen 23400
(Správca) R.Bron 30500
Goodsout T.Smyth 30000
Osobné F.Jones 25000
školenie * C.Evans 25500
Goodsout W.Pápež 30400
Prízemie T.Smythe 30500
Osobné J.Maler 33000

Cvičenie II

  1. Zobraziť súbor ľudí a preskúmať jeho obsah.
  2. Nájdite všetky riadky obsahujúce reťazec Smith v spise ľudia.Pomôcka: použite príkaz grep, ale nezabudnite, že v predvolenom nastavení sa rozlišujú malé a veľké písmená.
  3. Vytvorte nový súbor npeople obsahujúci všetky riadky začínajúce reťazcom Osobné v spise ľudí.Tip: použite príkaz grep s>.
  4. Potvrďte obsah súboru npeople uvedením súboru.
  5. Teraz pripojte všetky riadky tam, kde text končí reťazcom 500 v spise ľudia do súboru npeople.Tip: použite príkaz grep s >>.
  6. Opäť potvrďte obsah súboru npeople uvedením súboru.
  7. Nájdite adresu IP servera, ktorá je uložená v súbore / etc / hostitelia.Tip: použite príkaz grep s $ (názov hostiteľa)
  8. Použite egrep extrahovať z / etc / passwd riadky súborového účtu obsahujúce lp alebo svoj vlastný ID používateľa.

Riešenie cvičení nájdete na konci tohto článku.

Viac regulárnych výrazov

Regulárny výraz možno považovať za zástupné znaky na steroidoch.

Existuje jedenásť znakov so špeciálnym významom: úvodná a záverečná hranatá zátvorka [], spätné lomítko \, vsuvka ^, znak dolára $, bodka alebo bodka ., symbol zvislej čiary alebo rúry |, otáznik ?, hviezdička alebo hviezda *, znamienko plus + a otváracia a zatváracia kruhová zátvorka . Tieto špeciálne znaky sa tiež často nazývajú metaznaky.

Tu je celá sada špeciálnych znakov:

^ Začiatok riadku
$ Koniec riadku
. Ľubovoľný znak (okrem \ n nového riadku)
* 0 alebo viac predchádzajúceho výrazu
| Striedanie, jedno alebo druhé
[…] Explicitná sada znakov, ktoré sa majú zhodovať
+ 1 alebo viac predchádzajúcich výrazov
? 0 alebo 1 predchádzajúceho výrazu
\ Predchádzajúci symbol z neho robí doslova znak
Výslovný zápis kvantifikátora
(…) Logické zoskupenie časti výrazu

Predvolená verzia grep má iba obmedzenú podporu regulárneho výrazu. Aby fungovali všetky nasledujúce príklady, použite egrep namiesto toho alebo grep -E.

Vyhľadanie riadkov pomocou | aby zodpovedal niektorému výrazu:

$ egrep 'xxz | xzz' môj súbor

Vyhľadanie riadkov pomocou | na zhodu ktoréhokoľvek z výrazov v reťazci použite tiež ():

$ egrep '^ x (Yz | yz)' myfile

Vyhľadanie riadkov pomocou [] na priradenie ľubovoľného znaku:

$ egrep '^ x [Yy] z' myfile

Vyhľadanie riadkov pomocou [], aby sa nezhodoval žiadny znak:

$ egrep '^ x [^ Yy] z' myfile

Vyhľadanie riadkov pomocou znaku *, ktorý zodpovedá 0 alebo viacerým predchádzajúcim výrazom:

$ egrep '^ xy * z' myfile

Vyhľadanie riadkov pomocou +, ktoré zodpovedajú jednému alebo viacerým predchádzajúcim výrazom:

$ egrep '^ xy + z' myfile

Vyhľadanie riadkov pomocou ? aby zodpovedali 0 alebo 1 predchádzajúceho výrazu:

$ egrep '^ xy?môj súbor

Cvičenie III

  1. Nájdite všetky riadky obsahujúce mená Evans alebo Maler v spise ľudia.
  2. Nájdite všetky riadky obsahujúce mená Smith, Smyth alebo Smythe v spise ľudia.
  3. Nájdite všetky riadky obsahujúce mená Brown, Browen alebo Bron v spise ľudia.Ak máš čas:
  4. Nájdite riadok obsahujúci reťazec (admin), vrátane zátvoriek v zozname ľudí.
  5. Nájdite riadok obsahujúci znak * v súbore people.
  6. Kombináciou 5 a 6 vyššie nájdite oba výrazy.

Ďalšie príklady

Vyhľadanie riadkov pomocou . a * aby zodpovedali ľubovoľnej skupine znakov:

$ egrep '^ xy.* z 'môjsúbor

Vyhľadanie riadkov pomocou na priradenie N počtu znakov:

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

Vyhľadanie riadkov pomocou na priradenie N alebo viackrát:

$ egrep '^ xy 3, z' myfile

Vyhľadanie riadkov pomocou na priradenie N-krát, ale nie viac ako M-krát:

$ egrep '^ xy 2,3 z' myfile

Záver

V tomto tutoriáli sme sa najskôr pozreli na používanie grep v jednoduchej forme nájdete text v súbore alebo vo viacerých súboroch. Potom sme skombinovali hľadaný text s jednoduchými regulárnymi výrazmi a potom so zložitejšími pomocou egrep.

Ďalšie kroky

Dúfam, že tu získané vedomosti dobre využijete. Vyskúšaj grep príkazy na svoje vlastné dáta a pamätajte, že regulárne výrazy, ako sú tu popísané, môžu byť použité v rovnakej podobe v prehliadači vi, sed a awk!

Riešenia cvičení

Cvičenie I

Najskôr spočítajte, koľko riadkov je v súbore / etc / passwd.
$ wc -l / etc / passwd
Teraz nájdite všetky výskyty textu var v súbore / etc / passwd.
$ grep var / etc / passwd
Nájdite, koľko riadkov v súbore obsahuje text var

grep -c var / etc / passwd

Zistite, koľko riadkov NIE obsahuje text var.

grep -cv var / etc / passwd

Nájdite položku pre svoje prihlásenie v / etc / passwd spis
grep kdm / etc / passwd

Cvičenie II

Zobraziť súbor ľudí a preskúmať jeho obsah.
$ mačacích ľudí
Nájdite všetky riadky obsahujúce reťazec Smith v spise ľudí.
$ grep 'Smith' ľudí
Vytvorte nový súbor, ľudia, obsahujúce všetky riadky začínajúce reťazcom Osobné v ľudí spis
$ grep '^ Osobné' ľudia> ľudia
Potvrďte obsah súboru ľudia uvedením súboru.
$ mačka ľudí
Teraz pripojte všetky riadky tam, kde text končí reťazcom 500 v spise ľudí do spisu ľudia.
$ grep '500 $' ľudia >> ľudia
Znova potvrďte obsah súboru ľudia uvedením súboru.
$ mačka ľudí
Nájdite adresu IP servera, ktorá je uložená v súbore / etc / hostitelia.
$ grep $ (názov hostiteľa) / etc / hosts
Použite egrep extrahovať z / etc / passwd riadky súborového účtu obsahujúce lp alebo vaše vlastné ID užívateľa.
$ egrep '(lp | kdm :)' / etc / passwd

Cvičenie III

Nájdite všetky riadky obsahujúce mená Evans alebo Maler v spise ľudí.
$ egrep 'Evans | Maler' ľudia
Nájdite všetky riadky obsahujúce mená Smith, Smyth alebo Smythe v spise ľudí.
$ egrep 'Sm (i | y)?„ľudia
Nájdite všetky riadky obsahujúce mená Hnedá, Browen alebo Bron v spise ľudia.
$ egrep 'Brow?e?ľudia
Nájdite riadok obsahujúci reťazec (admin), vrátane zátvoriek v súbore ľudí.

$ egrep '\ (Admin \)' ľudia

Nájdite riadok obsahujúci znak * v spise ľudia.
$ egrep '\ *' ľudí
Kombináciou 5 a 6 vyššie nájdite oba výrazy.

$ egrep '\ (Admin \) | \ *' ľudí


Hry Najlepšie emulátory herných konzol pre systém Linux
Najlepšie emulátory herných konzol pre systém Linux
V tomto článku je uvedený zoznam populárneho softvéru na emuláciu herných konzol, ktorý je k dispozícii pre systém Linux. Emulácia je vrstva kompatibi...
Hry Najlepšie linuxové distribúcie pre hry v roku 2021
Najlepšie linuxové distribúcie pre hry v roku 2021
Operačný systém Linux prešiel dlhou cestou od svojho originálneho, jednoduchého serverového vzhľadu. Tento OS sa za posledné roky nesmierne vylepšil a...
Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...