Få tak på GNU grep

Hvis du har brukt Linux for noen tid, har du sikkert hørt om grep, men kanskje du ikke er vant til å bruke den. GNU grep er et verktøy som lar deg søke en eller flere filer, eller standard input. Enkelt, effektivt og helt nødvendig for alle som arbeider med Linux og UNIX-type systemer. Ønsker du å få et grep om grep? Vi vil komme i gang på kort tid

Det grunnleggende grep er enkle:. For å søke etter et gitt mønster, kjøre grep mønster
file
. Dette vil se gjennom en eller flere filer og returnere noen linjer som samsvarer med søkemønster. Merk at grep avkastning linjer
med tekst og filnavnet, hvis du søker gjennom filer i stedet for standard inngang eller utgang av en annen kommando.

Hvorfor vi grep

Den grep verktøyet kommer godt med i alle slags måter. Den mest åpenbare er å søke gjennom en eller flere filer for en periode. Du kan raskt og enkelt grave gjennom loggene eller konfigurasjonsfiler med grep.

Men det er også et svært nyttig verktøy for å filtrere utgangen av andre verktøy eller programmer. For eksempel, la oss si at du vil finne alle filer som er installert i /usr /bin av en pakke som installerer mange filer, kan du bruke en av disse:


 dpkg-query -L  pakke 
| grep " /usr /bin "

Eller hvis du har en RPM-basert system:


 rpm -q --filesbypkg  pakke 
| grep " /usr /bin "

I stedet for å se alle filene som er installert med pakken, vil du bare se filene som bor i /usr /bin. Du kan også rør de første resultatene gjennom grep igjen å begrense resultatene ytterligere.

Som med de fleste ting Unixy, er grep og små bokstaver som standard. For å søke etter et mønster og ignorere saken, bruker-alternativet. Dette vil behandle " search " og " Search " det samme.

For å søke gjennom underkataloger som bruker grep, vil du ønsker å bruke -r (rekursive) alternativet. Som standard vil grep bare søke gjennom toppkatalog det blir kjørt i. Så hvis du kjører noe sånt grep mønster product: * .html, vil grep ignorere alle katalogene under den nåværende arbeidskatalog. Bruke grep -r mønster
*. Html
vil søke den eksisterende katalogen og eventuelle underkataloger.

Ignorer Dette

Hva om du ønsker å finne alt men
en bestemt sikt? Du kan gjøre det med grep, også. Bruk v alternativet for å søke etter utgang eller filer som ikke har mønsteret.

Hvis du ønsker å vite bare hvilke filer ikke
ha mønsteret, men ikke trenger å se de ikke-samsvarende linjer, kan du bruke -L alternativet i stedet. Dette vil skrive ut en liste over filer som ikke har samsvarende mønster til standard ut

Derimot, hvis du ønsker å vite hvilke filer kamp &mdash.; men ønsker ikke å se hele linjen – deretter bruke l alternativet, som vil vise bare navnene på filene som samsvarer med mønsteret. Du kan kombinere alternativene, selvfølgelig, slik at du kan bruke grep-v l mønster
* for å finne ut hvilke filer som ikke samsvarer med et søkemønster.

Bryr seg ikke om filnavn og bare ønsker å se linjene som passer? Bruk -h å utelate filnavn i produksjon.

Standard for grep er å være grådig med søkemønstre. Med det mener jeg at grep vil matche den bokstavelige mønster og også lengre strenger av tegn som inneholder det. Så hvis du grep for " Beat, " grep vil matche " Beat " og også " Beatles, " " Beaten, " " Beats " og enhver annen streng som inneholder " Beat ". Det er mindre enn nyttig hvis du bare ønsker å se eksakt match.

For å begrense grep sin griskhet, bruker -w alternativet. Dette begrenser grep til hele ordet kamp.

Context

Når grepping gjennom loggfiler kan det være lurt å se noen av konteksten for linjer som samsvarer med et mønster. Normalt vil grep bare vise tilpasningslinjen, men den har tre alternativer for visning av linjer i sammenheng, slik at du kan se mer av de samsvarende filer. Alternativene er -A (etter sammenheng), -B (før sammenheng), og C (sammenheng).

For å bruke en av de kontekst alternativer, angir du alternativet og deretter antall linjer. For eksempel bruker grep -C2 mønster
filer
vil returnere samsvarende linjer (hvis noen) pluss to linjer kontekst før og etter. -a Og -B alternativene vil returnere noen antall linjer etter eller før matchet linje, hhv.

Regular Expressions

Den grep verktøyet ville være ganske ubrukelig hvis du bare kunne bruke bokstavelig strenger å søke gjennom filer og utgang. Hva om du ønsker å se om produksjonen inneholder noen tall, søke etter en rekke tegn, eller bruke et wildcard i søket? Ingen problem, kan du bruke vanlige uttrykk med grep for å takle omtrent enhver situasjon du ønsker å.

La oss se på noen av de regulære uttrykk du vil ønske å bruke. På skallet, * passer alle tegn null eller flere ganger. Det er behandlet annerledes med grep. Du pair * med andre begreper for å matche dem null eller flere ganger. Hvis du vil ha samme effekt som å bruke * på skallet, ville du bruke grep. * mønster
filer
stedet.

Hvis du ønsker å matche et søkemønster én eller flere ganger, vil du bruke + mønster
for å sikre at en gitt linje kamper minst en gang.

^ karakter matcher begynnelsen av en linje, og $ matcher slutten av en linje. La oss si at du ønsket å matche alle filer med en html forlengelse i en katalog, men ingen filer med BAK-extension:


 ls | grep. * html $ Det vil utelate noen filer med .html.bak, men matche alle filer som slutter med HTML. 

Hvis du ønsker å matche en spesiell karakter bokstavelig, må du bruke apostrof eller forut for det med en omvendt skråstrek. For eksempel grep '*' filnavn
vil finne alle forekomster av * tegn i en fil, men grep * filnavn
vil ikke matche tegnet *.

Det er også brakett uttrykk som passer hele klasser av tegn. For eksempel kan du søke etter A til Z med [A-Z] eller en rekke med [0-9]. I tillegg vil du finne brakett uttrykk som passer hele klasser av tegn, som [: punct:] for å matche enhver tegnsetting. Du ville bruke noe som dette for å matche noen tegnsetting på slutten av en linje:


 grep '[[: punct:]] $'  filer 
Det er nødvendig å bruke doble brak her. Se grep mannen siden eller manuell for mer om bruk av regulære uttrykk. Det kan være litt befuddling i starten, men etter at du begynner å få taket på regulære uttrykk de er svært nyttig.
Any Color You Like

Du har grepped og grepped til øynene dine er uklare, men du har problemer med å se strengen du leter etter. En måte å løse dette, bortsett fra en kopp kaffe og gå rundt blokken, er å sette litt farge inn i miksen.

--color (eller --colour) alternativet vil gi deg dette. Legg --color = auto eller --color = alltid.

Merk at noen distribusjoner skip med et alias for å aktivere fargestøtte som standard. For eksempel, Linux Mint 9 (som jeg bruker til å skrive dette stykket) gjør grep et alias for grep --colour = auto. Så hvis du ikke
ønsker farge, ville du trenger å bruke --color = off på enkelte distribusjoner.

Color eller ikke, er grep et verktøy du kan ikke leve uten hvis du er en " strøm bruker " eller systemadministratoren. Det er ikke nødvendig for daglig bruk av Linux som desktop system, selv om det absolutt ikke vondt å vite det. Men hvis du jobber med Linux profesjonelt eller vil, er grep en av de første verktøyene du bør mestre. Anmeldelser