Voorbeeld Gebruik van die Linux grep Command

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

Die Linux grep Command.

Stel jou voor jy het 'n tekslêer genaamd boeke met die volgende kinders se boektitels:

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:

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

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:

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:

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:

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:

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:

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

opsomming

Die grep-opdrag is 'n fundamentele Linux-opdrag en dit is een wat die moeite werd is om te leer, aangesien dit jou lewe baie makliker sal maak wanneer jy na lêers en prosesse soek wanneer jy die terminale gebruik.