Opplæring: Hvordan bruke Ack og Grep på Ubuntu 14.04

Søk og du skal finne. På et Linux-system er det mange søkeverktøy for raskt og presist å finne bestemte lokale data.


Vi kan bruke find-kommandoopplæringen fra Digital Ocean" href ="https://www.hostingadvice.com/external/?site=446bc9e98a55bc765badfce49aefe9e585e467ee7fdd065fe32ecfc73fdf79410824a7079171fa4c42ab3b10cc54d651fe0ac21805fea09f5bb463dd40dab693e9549ec22105349b02cead12482fc6c0370fa1598547af28613ee5a77689e3fa894d29fce618bc7f860a1ac9c2b5c02e" target ="_blank" rel ="noopener">finn og finn kommandoer for å finne filer etter navn, type, tidsstempler, eier eller størrelse. Finne-kommandoen kan også søke i filinnholdet, men i de fleste tilfeller er det et enklere verktøy for det som kalles grep. Hvis vi ønsket å søke i en fil eller katalog etter en relevant innholdstreng, kunne vi bruke grep-kommandoen, eller dens nyere alternativ.

Navnet “grep” står for “global / regular expression / priv ut.” “G” er en forkortelse for “globalt søk” på Unix. Grep kan brukes til å se om filinndataene den mottar samsvarer med et spesifisert mønster; slike mønstre kalles vanlige uttrykk, og du har sannsynligvis sett noen av dem før i andre programvareverktøy. I denne opplæringen bruker vi bare det grunnleggende om vanlige uttrykk, men sørg for å utforske deres “dypere farvann” om nødvendig.

Den fullstendige kraften til grep og lignende verktøy begynner virkelig å vises når vi kombinerer søke- og filtreringsoperasjoner med andre Linux-kommandoer.

Trinn 1: Få noen eksempler på datafiler

For å komme i gang med noen vanlige fildata, kan du laste ned jQuery-kildekoden fra Github-depotet.

Først må vi installere Git, slik at vi kan laste ned prosjekter fra Github:

1 sudo apt-get install git

Nå kan vi laste ned jquery-kildekoden til vår hjemmekatalog:

1
2

cd ~

git klone https://github.com/jquery/jquery.git

Gå deretter inn i katalogen vi nettopp lastet ned:

1 cd jquery

La oss se på filene i denne katalogen ved å bruke ls-kommandoen:

1ls

Vi ser en liste over forskjellige filtyper og noen få kataloger:

1 AUTHORS.txt bower.json build CONTRIBUTING.md ekstern Gruntfile.js LICENSE.txt package.json README.md src test

La oss se hvordan vi kan finne innhold i denne kildekoden.

Trinn 2a: Bruke Grep

Grep kommer allerede installert på hvert Linux-system, så det er ikke behov for manuell installasjon.

Grep Command Options

Dette er et sammendrag av grep-kommandoalternativene vi vil bruke i denne opplæringen:

  • -Jeg gjør ikke-følsom karakter matching
  • -r leser alle filene under hver katalog rekursivt
  • -n viser linjenummeret for hver kamp
  • -c viser kampantall
  • -v inverterer matching ved å velge linjene som ikke matcher
  • -o skriver bare ut de matchede delene av en samsvarende linje, med hver del på en separat utgangslinje
  • -w bare kamper på hele ord

Grunnleggende eksempler

Hvis du ville finne filene som inneholdt strengen “John Resig” for hver fil i den gjeldende katalogen, skriver du inn:

1 grep ‘John Resig’ *

Den resulterende produksjonen vil være:

1
2
3
4
5

FORFATTER.txt: John Resig <[email protected]>

grep: build: Er en katalog

grep: ekstern: Er en katalog

grep: src: Er en katalog

grep: test: Er en katalog

“*” Forteller grep om å matche alle filene i den gjeldende katalogen. Hvis søkemønsteret vårt inneholder noen mellomrom, må vi legge anførselstegn rundt søkstrengen (enkelt sitater eller doble anførselstegn).

Hvis du ville finne filene som inneholdt strengen “Forfattere” for hver fil i den gjeldende katalogen, skriver du inn:

1 grep Forfattere *

Den resulterende produksjonen vil være:

1
2
3
4
5

AUTHORS.txt: Forfattere bestilt av første bidrag.

grep: build: Er en katalog

grep: ekstern: Er en katalog

grep: src: Er en katalog

grep: test: Er en katalog

Grep fant en matchende fil og skrev ut linjen som samsvarte med “Forfatter” -mønsteret. Merk at grep ikke samsvarer med filnavnet her, bare innholdet i filen.

Hvis vi hadde skrevet dette i stedet:

1 grep-forfattere *

Vi vil se en annen fil som er matchet, fordi grep som standard er følsom for karakteromhylling.

Vi kan bruke et grep-kommandolinje-i-alternativ for å slå på lite følsom karaktertilpassing i stedet for å ignorere eventuell foringsfølsomhet:

1 grep -i forfattere

Nå kan vi se alle kamper uavhengig av hvilken som helst karaktertrekkkombinasjon vi kunne ha brukt i søksmønsteret vårt.

For å gjøre det samme søket i alle katalogene (i vår nåværende katalog), kan vi legge til -r rekursivt alternativ:

1 grep -i -r forfattere *

Nå vil grep søke i alle katalogene og deres rekursjoner til det er gjort.

Den samme kommandoen kan forkortes ved å kombinere alternativene og gi samme resultat:

1 grep -ir forfattere *

For å se linjenumrene for de samsvarende resultatene, legger vi til alternativet -n:

1 grep -irn forfattere *

Slik søker du i filen AUTHORS.txt etter linjer med et “gmail.com” -domener:

1 grep -i gmail.com AUTHORS.txt

Hvis vi ville telle alle kampene fra forrige søk, ville vi lagt til -c-alternativet:

1 grep -ic gmail.com AUTHORS.txt

Vi vil se et nummer skrevet ut, som indikerer antall matchede linjer.

For å invertere vårt tidligere “gmail.com” søkemønster, bruker vi alternativet -v:

1 grep -iv gmail.com

Nå ser vi alle linjene uten “gmail.com” -strengen – en ganske praktisk funksjon.

Vi kan også søke etter hele ordkampene. Gjør det mulig å søke ordet “bug”, uten tilfelle.

1 grep -i -w bug *

Alternativet -w tvinger mønsteret vårt til å bare samsvare på hele ord, så ord som inneholder strengen “bug” (f.eks. “Bugs”) vil ikke være en gyldig kamp.

Hvis vi ønsket å finne ut hvor mange ganger ordet “jquery” ble nevnt i hele kildekoden, ville vi pipette “|”Og legg deretter wc wordcount-kommandoen med et -l filter, slik at vi bare teller linjene – ikke antall ord eller tegn. Alternativet -o brukes til å skrive ut hver matchende del på en egen utskriftslinje, ellers vil antallet ikke være riktig.

1 grep -iro jquery * | wc -l

Hvis vi gjør et søk som returnerer mange treff, kan vi føre grep-utdata til mindre. Less er et personsøkerverktøy som gjør det enkelt å bla gjennom alle utdataene ved å bruke enten , , “Side opp”, eller “side ned” tastene eller mellomromstasten.

1 grep -ir jquery * | mindre

Vi kan også lenke flere grep-kommandoer sammen for å gjøre enkel filtrering av resultatene fra hver forrige kommando.

1 grep -ir jquery * | grep -i json | mindre

Avanserte eksempler

For å lage mye mer presise samsvarsmønstre, må vi bruke vanlige uttrykk.

Si for eksempel at vi ønsket å finne forfatterne med fornavnet “Chris” eller “John”, men ikke “Christopher,” “Christian” eller noe annet fornavnmønster.

1 grep -E "(^ Chris) | (^ John)" AUTHORS.txt

Og voilà, vi ser alle forfatterne med et fornavn av Chris eller John.

Alternativet -E forteller grep å tolke søkemønsteret vårt som et utvidet vanlig uttrykk. Dette mønsteret inneholder to samsvarende deler “(^ Chris)” og “(^ John)” som er atskilt med rørsymbolet: “|”, som representerer en logisk eller funksjon. Hvis noen av de to delene samsvarer, skriver vi ut resultatet. For bare å søke etter fornavnene bruker vi caret-symbolet “^” som representerer en start-of-line-funksjon. Så vi vil bare at navnemønstrene våre skal samsvare med begynnelsen av linjene.

Hvis du vil lære mer om bruk av grep med vanlig uttrykk, kan du se denne veiledningen. Å mestre vanlige uttrykk er en ferdighet som er verdt å jobbe med.

Trinn 2b: Bruke Ack

Ack er et søkeverktøy som bare grep, men det er optimalisert for å søke i kildekodetrær. Ack gjør nesten alt det grep gjør, men det skiller seg på følgende måter.

Ack ble designet for å:

  • Søk i kataloger rekursivt som standard
  • Utelukk enkelt visse filtyper, eller søk bare etter bestemte filtyper
  • Ignorer de vanlige versjonskontrollkatalogene som standard; dette er kataloger med navn som: .git, .gitignore, .svn
  • Ignorer binære filer som standard; dette er filer som: binære kjørbare filer, bilde / musikk / videofiler, gzip / zip / tar arkivfiler
  • Få bedre utheving av fyrstikker og også for å formatere utdataene litt mer rent

Når det er sagt, er et tilfelle der grep ofte er raskere enn ack, hvis du søker gjennom veldig store filer som ser ut med vanlige uttrykk.

Installerer Ack

For å komme i gang er det første trinnet å installere ack-verktøyet på maskinen din.

På en Ubuntu- eller Debian-maskin er dette så enkelt som å installere verktøyet fra standardlagringsplassene. Pakken kalles ack-grep:

1
2

sudo apt-get oppdatering

sudo apt-get install ack-grep

Kalles programmet ack-grep eller ack?

Navnet på programmet er “ack.” Noen pakker har kalt det “ack-grep” når de oppretter pakker, fordi det allerede er en pakke der ute som heter “ack” som ikke har noe med denne ack å gjøre. Vi kan fortelle Linux-systemet vårt å forkorte denne kommandoen til “ack” hvis vi ønsker å skrive denne kommandoen:

1 sudo dpkg-viderekobling – lokal – avvik / usr / bin / ack – navn – til / usr / bin / ack-grep

Nå vil verktøyet svare på navnet “ack” i stedet for “ack-grep.”

Ack Kommandoalternativer

Dette er et sammendrag av ack-kommandoalternativene vi vil bruke i opplæringen hans:

  • -Jeg gjør ikke-følsom karakter matching
  • -f-X skriver kun ut filene som vil bli søkt, uten å gjøre noe søk, der “X” betegner filtypen (f.eks. “–html”)
  • -n kommer ikke ned i noen underkataloger.
  • -w samsvarer bare med hele ord
  • -type = nox ekskluderer visse filtyper fra søket, der “X” betegner filtypen som skal ekskluderes (f.eks. “–type = nophp” for å ekskludere PHP-filer)

Grunnleggende eksempler

La oss gjøre noen søk på jQuery-kildetreet igjen for å se hvordan ack optimaliserer kodesøk.

1 ack -i Forfattere *

Vi ser dette resultatet:

1
2
3
4
5
6
7
8
9
10
11
12
1. 3
14
15
16
17
18

RS.txt

1: Forfattere bestilt av første bidrag.

 

bower.json

12: "AUTHORS.txt",

 

ytre / freses / MIT-LICENSE.txt

18: UKRENKELIGHET. UNDER HENDELSEN SKAL FORFATTERENE ELLER RETTLIGE INNEHAVER

 

ytre / qunit / MIT-LICENSE.txt

18: UKRENKELIGHET. UNDER HENDELSEN SKAL FORFATTERENE ELLER RETTLIGE INNEHAVER

 

LICENSE.txt

27: UKRENKELIGHET. UNDER HENDELSEN SKAL FORFATTERENE ELLER RETTLIGE INNEHAVER

 

package.json

10: "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt"

41: "grynt-Git-forfattere": "1.2.0",

Sammenlign output ovenfor med grep-versjonen av dette søket:

1 grep -i Forfattere *

Vi ser dette resultatet:

1
2
3
4
5
6
7
8
9

AUTHORS.txt: Forfattere bestilt av første bidrag.

bower.json: "AUTHORS.txt",

grep: build: Er en katalog

grep: ekstern: Er en katalog

LICENSE.txt: UKRENKELIGHET. UNDER HENDELSEN SKAL FORFATTERENE ELLER RETTLIGE INNEHAVER

package.json: "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt"

package.json: "grynt-Git-forfattere": "1.2.0",

grep: src: Er en katalog

grep: test: Er en katalog

Legg merke til hvordan ack-søket gjøres rekursivt som standard, og hver kamp skrives ut på sin egen linje med et linjenummer som standard. Formateringen er litt lettere å lese, spesielt når det er mange kamper.

Disse standardene og formateringen er fine når du ofte søker gjennom kodetrær.

Ack kan gjøre mer enn det. Lar oss finne alle HTML-filer i kildetreet.

1 ack -f –html

Alternativet -f skriver bare ut filene som ville bli søkt uten å søke. Alternativet –html er en spesiell funksjon i ack. Ack forstår mange filtyper, og ved å spesifisere dette alternativet ber du det bare søke etter HTML-filer.

La oss søke i alle JavaScript-filer, uten sans, for ordet “bug.”

1 ack -i -w –js feil

Alternativet –js forteller ack bare å søke i JavaScript-filer. Du kan søke etter alle slags andre filtyper, f.eks. –Php, –python, –perl, osv. Denne filtypebaserte filtreringen vil gjøre søkene dine mye raskere, spesielt på større kildetrær.

Noen ganger ønsker vi ikke å gjøre et rekursivt søk. For å søke i den gjeldende katalogen bare etter ordet “bug” skriver vi:

1 ack -n -w bug

Alternativet -n forteller ack å ikke gå ned i noen underkataloger.

La oss gjøre et rekursivt søk etter ordet “css”, men ekskluder alle JavaScript-filer:

1 ack -w – type = nojs css

Alternativet –type = noX gjør det mulig å ekskludere filtyper som er kjent av ack, der “X” angir filtypen som skal ekskluderes.

Avanserte eksempler

Det samme vanlige uttrykket som vi brukte med grep vil også fungere for ack:

1 ack "(^ Chris) | (^ John)" AUTHORS.txt

Ack har mye mer å tilby enn det som ble vist her. Se den offisielle dokumentasjonen for en mer dyptgående titt på bruk av ack.

Andre grep-lignende verktøy

Her er noen andre gode søkeverktøy som er verdt å utforske:

  • zgrep – Grep-verktøy som kan søke i komprimerte filer (f.eks. Komprimerte loggfiler)
  • annet Agrep – Grep-lignende verktøy med støtte for omtrentlige mønstre
  • Jq – Kommandolinjeverktøy for å søke i JSON-filer og strukturere den resulterende utdata (som gyldig JSON)
  • xgrep, xmlgrep, xmlstar – Dette er lignende kommandolinjeverktøy for å søke i innholdet i XML-filer
  • pdfgrep – Kommandolinjeverktøy for å søke i innholdet i PDF-filer
  • git grep – Innebygd søkeverktøy i Git-versjonssystemet
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map