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.
xyzxyzde
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úboralebo
$ alias grep = 'grep --color'$ grep xyz myfile
možnosti
Bežné možnosti používané s grep príkaz obsahuje:
- -našiel som všetky riadky bez ohľadu na to prípadu
- -c počítať koľko riadkov obsahuje text
- -n riadok displeja čísla zodpovedajúcich riadkov
- -Zobrazujem iba spis mien ten zápas
- -r rekurzívny prehľadávanie podadresárov
- -v nájsť všetky riadky NIE obsahujúci text
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
- Najskôr spočítajte, koľko riadkov je v súbore / etc / passwd.
- Teraz nájdite všetky výskyty textu var v súbore / etc / passwd.
- Nájdite, koľko riadkov v súbore obsahuje text
- Zistite, koľko riadkov NIE obsahuje text var.
- 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' myfileVyhľadanie všetkých riadkov končiacich textom pomocou znaku $:
$ grep 'xyz $' myfileVyhľadanie riadkov obsahujúcich reťazec obsahujúcich znaky ^ aj $:
$ grep '^ xyz $' myfileVyhľ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' myfileVyhľadanie riadkov pomocou .* aby zodpovedali 0 alebo viac ľubovoľným znakom:
$ grep '^ x.* z 'môjsúborVyhľadanie riadkov pomocou \ uniknúť znaku *:
$ grep '^ x \ * z' myfileAk 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:
- umožňuje plné použitie všetkých regulárnych výrazov
- môže súčasne vyhľadávať viac ako jeden výraz
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 |
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 / passwdAvš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 25000Osobné 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
- Zobraziť súbor ľudí a preskúmať jeho obsah.
- 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á.
- 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>.
- Potvrďte obsah súboru npeople uvedením súboru.
- 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 >>.
- Opäť potvrďte obsah súboru npeople uvedením súboru.
- 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)
- 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úborVyhľ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' myfileVyhľadanie riadkov pomocou [], aby sa nezhodoval žiadny znak:
$ egrep '^ x [^ Yy] z' myfileVyhľ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' myfileVyhľadanie riadkov pomocou ? aby zodpovedali 0 alebo 1 predchádzajúceho výrazu:
$ egrep '^ xy?môj súbor
Cvičenie III
- Nájdite všetky riadky obsahujúce mená Evans alebo Maler v spise ľudia.
- Nájdite všetky riadky obsahujúce mená Smith, Smyth alebo Smythe v spise ľudia.
- Nájdite všetky riadky obsahujúce mená Brown, Browen alebo Bron v spise ľudia.Ak máš čas:
- Nájdite riadok obsahujúci reťazec (admin), vrátane zátvoriek v zozname ľudí.
- Nájdite riadok obsahujúci znak * v súbore people.
- 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úborVyhľ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' myfileVyhľ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
Zistite, koľko riadkov NIE obsahuje text var.
grep -cv var / etc / passwdNájdite položku pre svoje prihlásenie v / etc / passwd spisgrep 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í.
Nájdite riadok obsahujúci znak * v spise ľudia.$ egrep '\ *' ľudí
Kombináciou 5 a 6 vyššie nájdite oba výrazy.