Grep (ir egrep) naudojimas su įprastomis išraiškomis

Using Grep With Regular Expressions



Šioje pamokoje aprašoma, kaip naudoti abu sukibimas (ir egrep) t o rasti tekstą failuose, jų paprastą formą ir kartu su reguliariomis išraiškomis. Jame yra keletas pavyzdžių ir pratimai , daugiau sprendimai , kad žiūrovas užbaigtų.

Pavadinimas sukibimas kilęs iš komandos „ed“ (ir „vim“) „g/re/p“, o tai reiškia, kad visame pasaulyje reikia ieškoti tam tikros reguliariosios išraiškos ir spausdinti (rodyti) išvestį.







Reguliarus Išraiškos

Komunalinės paslaugos leidžia vartotojui ieškoti teksto failų eilutes, atitinkančias įprastą išraišką ( reguliarusis ekspresas ). Įprasta išraiška yra paieškos eilutė, sudaryta iš teksto ir vieno ar daugiau iš 11 specialiųjų simbolių. Paprastas pavyzdys yra eilutės pradžios atitikimas.



Pavyzdinis failas

Pagrindinė forma sukibimas gali būti naudojamas norint rasti paprastą tekstą tam tikrame faile ar rinkmenose. Norėdami išbandyti pavyzdžius, pirmiausia sukurkite pavyzdinį failą.



Naudokite redaktorių, pvz., „Nano“ arba „vim“, norėdami nukopijuoti žemiau esantį tekstą į failą, pavadintą mano byla .





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

Nors pavyzdžius galite nukopijuoti ir įklijuoti į tekstą (atkreipkite dėmesį, kad dvigubos kabutės gali būti netinkamai nukopijuotos), norint tinkamai išmokti komandas, jas reikia įvesti.

Prieš bandydami pavyzdžius, peržiūrėkite pavyzdinį failą:



$katėmano byla

Paprasta paieška

Norėdami rasti teksto „xyz“ faile, atlikite šiuos veiksmus:

$sukibimasxyz myfile

Spalvų naudojimas

Norėdami rodyti spalvas, naudokite –color (dvigubą brūkšnelį) arba tiesiog sukurkite slapyvardį. Pavyzdžiui:

$sukibimas -spalvaxyz myfile

arba

$slapyvardis sukibimas= 'sukibimas-spalva '
$sukibimasxyz myfile

Galimybės

Dažnos parinktys, naudojamos su sukibimas komandą sudaro:

  • -randu visas eilutes nepriklausomai atvejo
  • -c skaičiuoti kiek eilučių yra tekstas
  • -rodymo eilutė skaičių atitinkančių eilučių
  • -tik ekranas failą vardus tos rungtynės
  • -r rekursyvus paieška pakatalogiuose
  • -v rasti visas eilutes NE kuriame yra tekstas

Pavyzdžiui:

$sukibimas -ixyz myfile# raskite tekstą nepriklausomai nuo didžiosios ir mažosios raidės

$sukibimas -icxyz myfile# suskaičiuokite eilutes su tekstu

$sukibimas xyz myfile# rodyti eilučių numerius

Kurti kelis failus

Prieš bandydami ieškoti kelių failų, pirmiausia sukurkite kelis naujus failus:

$išmetėxyz>mano failas1
$išmetė -Irxyz nxzz nXYZ>mano failas2
$išmetė -Irxxx nyy>mano failas3
$katėmano failas1
$katėmano failas2
$katėmano failas3

Ieškoti kelių failų

Norėdami ieškoti kelių failų naudodami failų pavadinimus arba pakaitos simbolį, įveskite:

$sukibimas -icxyz myfile myfile1 myfile2 myfile3
$sukibimas xyz mano*
# atitikimo failų pavadinimai, prasidedantys „mano“

Pratimas I

  1. Pirmiausia suskaičiuokite, kiek eilučių yra faile /etc /passwd.
Patarimas: naudotiwc -jie /ir kt/passwd
  1. Dabar raskite visus teksto atvejus kur faile /etc /passwd .
  2. Raskite, kiek failo eilučių yra tekstas
  3. Raskite, kiek eilučių NĖRA teksto kur .
  4. Raskite savo prisijungimo įrašą skiltyje /etc/passwd

Pratimų sprendimus galite rasti šio straipsnio pabaigoje.

Reguliariųjų išraiškų naudojimas

Komanda sukibimas taip pat gali būti naudojamas su įprastomis išraiškomis, naudojant vieną ar daugiau iš vienuolikos specialiųjų simbolių ar simbolių paieškai patikslinti. Įprasta išraiška yra simbolių eilutė, apimanti specialius simbolius, leidžiančius suderinti modelius tokiose paslaugose kaip, pvz sukibimas , aš atėjau ir sed . Atminkite, kad eilutes gali tekti pateikti kabutėse.

Galimi specialūs simboliai:

^ Eilutės pradžia
$ Eilutės pabaiga
. Bet koks simbolis (išskyrus n naują eilutę)
* 0 ar daugiau ankstesnės išraiškos
Prieš simbolį jis tampa tiesioginiu simboliu

Atminkite, kad *, kuris gali būti naudojamas komandų eilutėje, kad atitiktų bet kokį skaičių simbolių, įskaitant nė vieno, yra ne čia naudojamas tuo pačiu būdu.

Taip pat atkreipkite dėmesį į citatų naudojimą šiuose pavyzdžiuose.

Pavyzdžiai

Norėdami rasti visas eilutes, prasidedančias tekstu, naudodami ^ simbolį:

$sukibimas„^Xyz“ mano failas

Norėdami rasti visas eilutes, kurios baigiasi tekstu, naudodami simbolį $:

$sukibimas„Xyz $“ mano failas

Norėdami rasti eilutes, kuriose yra eilutė naudojant ^ ir $ simbolius:

$sukibimas„^Xyz $“ mano failas

Norėdami rasti eilutes naudodami . kad atitiktų bet kurį personažą:

$sukibimas„^X.z“ mano failas

Norėdami rasti eilutes naudodami *, kad atitiktų 0 ar daugiau ankstesnės išraiškos:

$sukibimas'^Xy*z 'myfile

Norėdami rasti eilutes naudodami.*, Kad atitiktų bet kurį simbolį 0 ar daugiau:

$sukibimas'^ X.*z 'myfile

Norėdami rasti eilutes naudodami pabėgti nuo * simbolio:

$sukibimas'^ X *z 'myfile

Norėdami rasti simbolį, naudokite:

$sukibimas„\“ mano failas

Išraiška grep - egrep

The sukibimas komanda palaiko tik galimų reguliariųjų išraiškų pogrupį. Tačiau įsakymas egrep:

  • leidžia visiškai naudoti visas reguliarias išraiškas
  • vienu metu gali ieškoti daugiau nei vienos išraiškos

Atminkite, kad išraiškos turi būti įtrauktos į kabučių porą.

Norėdami naudoti spalvas, naudokite –color arba dar kartą sukurkite slapyvardį:

$slapyvardis egrep='egrep -spalva'

Norėdami ieškoti daugiau nei vieno reguliariai į egrep komanda gali būti parašyta keliose eilutėse. Tačiau tai taip pat galima padaryti naudojant šiuos specialius simbolius:

| Alternatyva, viena ar kita
(…) Loginis išraiškos dalies grupavimas
$egrep '(^šaknis |^uucp |^paštas)' /ir kt/passwd

Iš failo, |, išskiriamos eilutės, prasidedančios šaknimi, uucp ar paštu simbolis, reiškiantis bet kurią iš parinkčių.

Toliau nurodyta komanda bus ne darbas, nors pranešimas nerodomas, nes pagrindinis sukibimas komanda nepalaiko visų įprastų išraiškų:

$sukibimas '(^šaknis |^uucp |^paštas)' /ir kt/passwd

Tačiau daugumoje „Linux“ sistemų komanda grep -E yra tas pats kaip naudoti egrep :

$sukibimas -IR '(^šaknis |^uucp |^paštas)' /ir kt/passwd

Filtrų naudojimas

Vamzdynai yra vienos komandos išvesties siuntimas kaip įvestis į kitą komandą ir yra vienas galingiausių turimų „Linux“ įrankių.

Komandos, rodomos sraute, dažnai vadinamos filtrais, nes daugeliu atvejų jos siunčia arba modifikuoja jiems perduotą įvestį prieš siunčiant modifikuotą srautą į standartinę išvestį.

Šiame pavyzdyje standartinė išvestis iš ls -l perduodamas kaip standartinis įėjimas į sukibimas komandą. Išėjimas iš sukibimas tada komanda perduodama kaip įvestis į daugiau komandą.

Tai parodys tik katalogus /tt :

$ls -jie /ir kt|sukibimas„^D“|daugiau

Šios komandos yra filtrų naudojimo pavyzdžiai:

$ps -jautis|sukibimascron

$PSO|sukibimaskdm

Pavyzdinis failas

Norėdami išbandyti peržiūrą, pirmiausia sukurkite šį failo pavyzdį.

Naudokite redaktorių, pvz., „Nano“ arba „vim“, norėdami nukopijuoti žemiau esantį tekstą į failą, pavadintą žmonės:

Asmeninis J.Smith 25000
Asmeninis E.Smith 25400
Mokymai A.Brown 27500
Mokymai C.Browen 23400
(Administratorius) R.Bronas 30500
Goodsout T.Smyth 30000
Asmeninis F.Jonesas 25000
mokymas* C.Evansas 25500
Goodsout W. Popiežius 30400
Grindys T.Smythe 30500
Asmeninis J.Maler 33000

II pratimas

  1. Rodyti failą žmonių ir išnagrinėti jo turinį.
  2. Raskite visas eilutes, kuriose yra eilutė Kalvis faile žmonės. Patarimas: naudokite komandą grep, tačiau atminkite, kad pagal numatytuosius nustatymus jis skiria didžiąsias ir mažąsias raides.
  3. Sukurkite naują failą, npeople, kuriame yra visos eilutės, prasidedančios eilute Asmeninis žmonių faile. Patarimas: naudokite komandą grep su>.
  4. Sąraše patvirtinkite failo turinį.
  5. Dabar pridėkite visas eilutes, kuriose tekstas baigiasi eilute 500 faile žmonės į failą npeople. Patarimas: naudokite komandą grep su >>.
  6. Dar kartą patvirtinkite failo turinį, nurodydami failą.
  7. Raskite serveryje esančio failo IP adresą /etc/hosts . Patarimas: naudokite komandą grep su $ (pagrindinio kompiuterio pavadinimas)
  8. Naudoti egrep išgauti iš /etc/passwd failų sąskaitų eilutes, kuriose yra lp ar savo Vartotojo ID .

Pratimų sprendimus galite rasti šio straipsnio pabaigoje.

Daugiau reguliariųjų išraiškų

Įprasta išraiška gali būti laikoma steroidų pakaitos simboliais.

Yra vienuolika simbolių, turinčių ypatingą reikšmę: įžanginiai ir uždaromi laužtiniai skliaustai [], atbulinis brūkšnys , kareivis ^, dolerio ženklas $, taškas arba taškas., Vertikali juosta arba vamzdžio simbolis |, klaustukas? žvaigždutė arba žvaigždutė *, pliuso ženklas + ir atidaromas bei uždaromas apvalus skliaustas {}. Šie specialūs simboliai taip pat dažnai vadinami metaženkliais.

Čia yra visas specialiųjų simbolių rinkinys:

^ Eilutės pradžia
$ Eilutės pabaiga
. Bet koks simbolis (išskyrus n naują eilutę)
* 0 ar daugiau ankstesnės išraiškos
| Alternatyva, viena ar kita
[…] Atitinkamas aiškus simbolių rinkinys
+ 1 ar daugiau ankstesnės išraiškos
? 0 arba 1 ankstesnės išraiškos
Prieš simbolį jis tampa tiesioginiu simboliu
{…} Aiškus kiekybinis žymėjimas
(…) Loginis išraiškos dalies grupavimas

Numatytoji versija sukibimas turi tik ribotą reguliariosios išraiškos palaikymą. Kad visi toliau pateikti pavyzdžiai veiktų, naudokite egrep vietoj to arba grep -E .

Norėdami rasti eilutes naudodami | kad atitiktų bet kurią išraišką:

$egrep„Xxz|xzz “mano failas

Norėdami rasti eilutes naudodami | kad atitiktų bet kurią išraišką eilutėje, taip pat naudokite ():

$egrep„^ X(Yz|yz)'Mano failas

Norėdami rasti eilutes naudodami [], kad atitiktų bet kurį simbolį:

$egrep„^ X[Yy]z 'myfile

Norėdami rasti eilutes naudodami [], kad jos neatitiktų jokio simbolio:

$egrep„^ X[^ Taip]z 'myfile

Norėdami rasti eilutes naudodami *, kad atitiktų 0 ar daugiau ankstesnės išraiškos:

$egrep'^Xy*z 'myfile

Norėdami rasti eilutes naudodami +, kad atitiktų 1 ar daugiau ankstesnės išraiškos:

$egrep„^Xy+z“ mano failas

Norėdami rasti eilutes naudodami? atitinka 0 arba 1 ankstesnę išraišką:

$egrep„^Xy? Z“ mano failas

III pratimas

  1. Raskite visas eilutes, kuriose yra pavadinimai Evansas arba tapytojas byloje žmonės.
  2. Raskite visas eilutes, kuriose yra pavadinimai Smithas, Smitas arba Smythe byloje žmonės.
  3. Raskite visas eilutes, kuriose yra pavadinimai Ruda, Browen arba Šaltinis faile žmonės. Jei turite laiko:
  4. Raskite eilutę, kurioje yra eilutė (admin), įskaitant skliaustus, byloje žmonės.
  5. Raskite eilutę, kurioje yra simbolis * faile žmonės.
  6. Sujunkite 5 ir 6 aukščiau, kad surastumėte abi išraiškas.

Daugiau pavyzdžių

Norėdami rasti eilutes naudodami . ir * kad atitiktų bet kokį simbolių rinkinį:

$egrep'^Xy.*z 'myfile

Norėdami rasti eilutes naudodami {}, kad atitiktų N simbolių skaičių:

$egrep'^Xy{3}z 'myfile
$egrep'^Xy{4}z 'myfile

Jei norite rasti eilutes naudodami {}, kad atitiktų N ar daugiau kartų:

$egrep'^Xy{3,}z 'myfile

Jei norite rasti eilutes naudodami {}, kad atitiktų N kartų, bet ne daugiau kaip M kartų:

$egrep'^Xy{2,3}z 'myfile

Išvada

Šioje pamokoje mes pirmiausia pažvelgėme į naudojimą sukibimas paprasta forma rasti tekstą faile arba keliuose failuose. Tada ieškomą tekstą sujungėme su paprastomis reguliariomis išraiškomis, o vėliau - sudėtingesnėmis egrep .

Tolesni žingsniai

Tikiuosi, kad čia įgytas žinias panaudosite gerai. Pabandyk sukibimas komandų pagal savo duomenis ir atminkite, kad čia aprašytos įprastos išraiškos gali būti naudojamos ta pačia forma mes , sed ir awk !

Pratimų sprendimai

Pratimas I

Pirmiausia suskaičiuokite, kiek eilučių yra faile /etc/passwd .
$ wc -l /etc/passwd
Dabar raskite visus teksto atvejus kur faile /etc /passwd.
$ grep var /etc/passwd
Raskite, kiek failo eilučių yra tekstas kur

sukibimas -ckur/ir kt/passwd

Raskite, kiek eilučių NĖRA teksto kur .

sukibimas -cvkur/ir kt/passwd

Raskite savo prisijungimo įrašą skiltyje /etc/passwd failą
grep kdm /etc/passwd

II pratimas

Rodyti failą žmonių ir išnagrinėti jo turinį.
$ cat people
Raskite visas eilutes, kuriose yra eilutė Kalvis byloje žmonių .
$ grep 'Smith' people
Sukurkite naują failą, žmonių , kuriame yra visos eilutės, prasidedančios eilute Asmeninis viduje konors žmonių failą
$ grep '^Personal' people> npeople
Patvirtinkite failo turinį žmonių išvardijant failą.
$ cat npeople
Dabar pridėkite visas eilutes, kuriose tekstas baigiasi eilute 500 byloje žmonių prie bylos žmonių .
$ grep '500$' people>>npeople
Dar kartą patvirtinkite failo turinį žmonių išvardijant failą.
$ cat npeople
Raskite serveryje esančio failo IP adresą /etc/hosts .
$ grep $(hostname) /etc/hosts
Naudoti egrep išgauti iš /etc/passwd failų sąskaitų eilutes, kuriose yra lp arba savo vartotojo ID.
$ egrep '(lp|kdm:)' /etc/passwd

III pratimas

Raskite visas eilutes, kuriose yra pavadinimai Evansas arba tapytojas byloje žmonių .
$ egrep 'Evans|Maler' people
Raskite visas eilutes, kuriose yra pavadinimai Kalvis , Smyth arba Smythe byloje žmonių .
$ egrep 'Sm(i|y)the?' people
Raskite visas eilutes, kuriose yra pavadinimai Ruda , Browen arba Šaltinis byloje žmonės.
$ egrep 'Brow?e?n' people
Raskite eilutę, kurioje yra eilutė (admin), įskaitant skliaustus, į bylą žmonių .

$egrep ' (Administratorius )'žmonių

Raskite eilutę, kurioje yra simbolis * byloje žmonės.
$ egrep '*' people
Sujunkite 5 ir 6 aukščiau, kad surastumėte abi išraiškas.

$egrep ' (Administratorius ) | *'žmonių