inleiding
Die Linux grep-opdrag word gebruik as 'n metode om insette te filter.
GREP staan vir Global Regular Expression Printer en daarom moet jy kennis hê van gereelde uitdrukkings om dit effektief te gebruik.
In hierdie artikel gaan ek jou 'n aantal voorbeelde wys wat jou sal help om die grep-opdrag te verstaan.
01 van 09
Hoe om 'n string te soek in 'n lêer wat GREP gebruik
Stel jou voor jy het 'n tekslêer genaamd boeke met die volgende kinders se boektitels:
- Robin Hood
- Rooikappie
- Peter Pan
- Goldilocks En The Three Bears
- Sneeuwit En Die Sewe Dwerge
- Pinnochio
- Die kat in die hoed
- Die Drie Klein Varke
- Die Gruffalo
- Charlie En Die Sjokoladefabriek
Om al die boeke met die woord "The" in die titel te vind, sou u die volgende sintaksis gebruik:
grep Die boeke
Die volgende resultate sal teruggestuur word:
- Goldilocks En The Three Bears
- Sneeuwit En Die Sewe Dwerge
- Die kat in die hoed
- Die Drie Klein Varke
- Die Gruffalo
- Charlie En Die Sjokoladefabriek
In elk geval sal die woord "The" uitgelig word.
Let daarop dat die soektog hoofletters sensitief is, so as een van die titels "die" in plaas van "The" het, sou dit nie terugbesorg word nie.
Om die saak te ignoreer, kan jy die volgende skakelaar byvoeg:
Gryp die boeke - geval-geval
Jy kan ook die -i skakelaar gebruik as volg:
grep -i die boeke
02 van 09
Soek vir 'n string in 'n lêer met wildkaarte
Die grep-opdrag is baie kragtig. U kan 'n verskeidenheid patroon-ooreenstemmende tegnieke gebruik om resultate te filter.
In hierdie voorbeeld sal ek jou wys hoe om 'n string in 'n lêer te soek deur wildkaarte te gebruik .
Stel jou voor dat jy 'n lêer genaamd plekke het met die volgende Skotse plekname:
Aberdeen
Aberystwyth
aberlour
Inverurie
Inverness
Newburgh
nuwe takbokke
nuwe galweg
Glasgow
Edinburgh
As jy al die plekke met inver in die naam wil vind, gebruik die volgende sintaksis:
grep inver * plekke
Die asterisk (*) wildkaart staan vir 0 of baie. Daarom, as jy 'n plek het wat 'n inwoner genoem word of 'n plek genoem inverness, dan sal albei terugbesorg word.
Nog 'n wildkaart wat jy kan gebruik, is die tydperk (.). U kan dit gebruik om 'n enkele letter te pas.
grep inver.r plekke
Bogenoemde opdrag sal plekke vind wat inverurie en inverary genoem word, maar sal nie invereerie vind nie, want daar kan slegs een wildkaart tussen die twee r's wees soos aangedui deur die enkele periode.
Die periode wildcard is nuttig, maar dit kan probleme veroorsaak as jy een het as deel van die teks wat jy soek.
Kyk byvoorbeeld na hierdie lys van domeinname
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Om al die about.coms te vind, kan jy net soek met die volgende sintaksis:
grep * oor * domainnames
Bogenoemde bevel sal val indien die lys die volgende naam daarin bevat:
- everydaylinuxuser.com/about.html
U kan dus die volgende sintaksis probeer:
grep * about.com domainnames
Dit sal goed werk tensy daar 'n domein met die volgende naam was:
aboutycom.com
Om die term about.com regtig te soek, moet jy die punt as volg ontsnap:
grep * about \ .com domainnames
Die finale wildkaart om jou te wys is die vraagteken wat vir nul of een karakter staan.
Byvoorbeeld:
grep? ber plek name
Bogenoemde bevel sal aberdeen, aberystwyth of selfs berwick terugbring.
03 van 09
Soek vir snare aan die begin en einde van die lyn Gebruik grep
Die karat (^) en die dollar ($) simbool laat jou toe om patrone aan die begin en einde van lyne te soek.
Stel jou voor jy het 'n lêer genaamd sokker met die volgende span name:
- Blackpool
- Liverpool
- Manchester stad
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
As jy al die spanne wat met Manchester begin het, sou jy die volgende sintaksis gebruik:
grep ^ Manchester spanne
Bogenoemde bevel sal Manchester City en Manchester United terugkeer, maar nie FC United Of Manchester nie.
Alternatiewelik kan jy al die spanne wat met United eindig gebruik die volgende sintaksis gebruik:
grep United $ spanne
Bogenoemde bevel sal Manchester United en Newcastle United terugkeer, maar nie FC United Of Manchester nie.
04 van 09
Tel die aantal ooreenkomste met grep
As jy nie die werklike lyne wil terugstuur wat 'n patroon pas met grep nie, maar jy wil net weet hoeveel daar is, kan jy die volgende sintaksis gebruik:
grep -c patroon insetfile
As die patroon twee keer gespeel is, sal die nommer 2 terugbesorg word.
05 van 09
Vind al die terme wat nie ooreenstem met grep nie
Stel jou voor dat jy 'n lys van plekname het met die lande wat soos volg gelys is:
- Aberdeen Skotland
- glasgow skotland
- liverpool england
- colwyn baai
- Londen Engeland
U het dalk opgemerk dat Colwyn Bay geen land het nie.
Om te soek na al die plekke met 'n land, kan jy die volgende sintaksis gebruik:
grep land $ plekke
Die uitslae sal alle plekke wees behalwe Colwynbaai.
Dit werk natuurlik net vir plekke wat in die land eindig (skaars wetenskaplik).
U kan die keuse omkeer deur die volgende sintaksis te gebruik:
grep -v land $ plekke
Dit sal al die plekke vind wat nie met grond eindig nie.
06 van 09
Hoe om leë lyne in lêers te vind wat grep gebruik
Stel jou voor dat jy 'n insetlêer het wat deur 'n derdeparty-aansoek gebruik word, wat ophou om die lêer te lees wanneer dit 'n leë lyn soos volg vind:
- Aberdeen Skotland
- Inverness Skotland
- liverpool england
- Colwyn Bay Wales
Wanneer die aansoek aan die lyn kom na liverpool, sal dit ophou lees betekenis. Colwyn Bay is heeltemal gemis.
Jy kan grep gebruik om leë lyne te soek met die volgende sintaksis:
grep ^ $ plekke
Ongelukkig is dit nie besonder nuttig nie, want dit gee net die leë lyne terug.
U kan natuurlik 'n telling van die aantal leë lyne as 'n tjek kry om te sien of die lêer soos volg geldig is:
grep -c ^ $ plekke
Dit sal egter nuttiger wees om die lynnommers te ken wat 'n leë lyn het sodat jy dit kan vervang. Jy kan dit met die volgende opdrag doen:
grep -n ^ $ plekke
07 van 09
Hoe om te soek na strings van hoofletters of kleinletters met grep
Met grep kan jy bepaal watter lyne in 'n lêer hoofletters bevat met die volgende sintaksis:
grep '[AZ]' lêernaam
Met die vierkantige hakies [] kan jy die omvang van karakters bepaal. In die bostaande voorbeeld pas dit by enige karakter wat tussen A en Z is.
U kan dus klein letters gebruik om die volgende sintaksis te gebruik:
grep '[az]' lêernaam
As u slegs letters en nie syfers of ander simbole wil ooreenstem nie, kan u die volgende sintaksis gebruik:
grep '[a-zA-Z]' lêernaam
Jy kan soos volg met getalle doen:
grep '[0-9]' lêernaam
08 van 09
Op soek na herhalende patrone Gebruik grep
U kan krullerhakies () gebruik om 'n herhalende patroon te soek.
Stel jou voor dat jy 'n lêer met telefoonnommers soos volg het:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Jy weet die eerste deel van die nommer moet drie syfers wees en jy wil die lyne vind wat nie by hierdie patroon pas nie.
Uit die vorige voorbeeld weet jy dat [0-9] alle nommers in 'n lêer teruggee.
In hierdie geval wil ons die lyne wat begin met drie getalle gevolg deur 'n koppelteken (-). U kan dit met die volgende sintaksis doen:
grep "^ [0-9] [0-9] [0-9] -" nommers
Soos ons van vorige voorbeelde weet, beteken die karat (^) dat die lyn met die volgende patroon moet begin.
Die [0-9] sal vir enige getal tussen 0 en 9 soek. Aangesien dit drie keer ingesluit is, stem dit ooreen met 3 nommers. Ten slotte is daar 'n koppelteken om aan te dui dat 'n koppelteken die drie getalle moet slaag.
Deur die krullerige hakies te gebruik, kan u die soektog kleiner maak soos volg:
grep "^ [0-9] \ {3 \} -" nommers
Die slash ontsnap die {bracket sodat dit werk as deel van die gewone uitdrukking, maar wat in essensie sê, is [0-9] {3} wat enige getal tussen 0 en 9 drie keer beteken.
Die krullerige hakies kan ook soos volg gebruik word:
{5,10}
{5,}
Die {5,10} beteken dat die karakter wat gesoek word, minstens 5 keer herhaal moet word, maar nie meer as 10 nie, terwyl die {5,} beteken dat die karakter minstens 5 keer herhaal moet word, maar dit kan meer wees as dit.
09 van 09
Die uitvoer van ander opdragte gebruik grep
Tot dusver het ons gekyk na patrone wat ooreenstem met individuele lêers, maar grep kan die uitvoer van ander opdragte gebruik as die insette vir patroonpassing.
'N goeie voorbeeld hiervan is die gebruik van die ps bevel wat aktiewe prosesse lys.
Spring byvoorbeeld die volgende opdrag uit:
ps -ef
Al die lopende prosesse op u stelsel sal vertoon word.
Jy kan grep gebruik om so 'n lopende proses soos volg te soek:
ps -ef | grep firefox