Det er en klassisk bit av datamaskin visdom som sier "Hvis du har et problem, og bestemmer deg for å løse det med vanlige uttrykk, har du nå to problemer." Dette kommer selvsagt ut fra oppfatningen om at regulære uttrykk er komplisert blanding av magiske tegn og Voodoo. Regelmessige uttrykk kan tillate deg å oppnå elegant og konsistent programlogikk raskt og enkelt, men bare når du har lært å forstå hvordan de fungerer og hvorfor. Omtrent alle Linux- eller Mac-systemer leveres med et kraftig regex verktøysamtal grep, og læring grep er en viktig oppgave for enhver strømbruker eller systemadministrator. I dag skal vi utforske noen av hva du kan gjøre med grep, og hvordan det kan være et av de kraftigste verktøyene i geek arsenalen din.

Hvordan det fungerer

Kort sagt, Greps jobb er å søke gjennom en blokk med innspill. Det er ganske uklart, så det er best beskrevet av eksempel. La oss si at du har en tekstfil kalt distros.txt som har en liste over Linux-distribusjoner, som den nedenfor.

Debian - Stabil serverfordeling
Ubuntu - Desktop distro opprinnelig basert på Debian
Kubuntu - Bruker KDE-skrivebordet i stedet for Gnome
Fedora - Fortsettelse av det gratis Red Hat-skrivebordssystemet
Gentoo - Et raskt, kildebasert Linux-system for pro brukere
SuSE - Kommersiell Linux eid av Novell
Mint - Ubuntu-avledet distro med ekstra begrenset programvare

Grep kan brukes til å lese gjennom teksten og filtrere den for å vise bare de delene du vil ha. Hvis du bare vil se linjene som inneholder ordet "Ubuntu", vil du kjøre følgende kommando:

 grep Ubuntu distros.txt 

(Din versjon av grep kan eller ikke inkluderer fargeutheving som i eksempelet ovenfor)

Case Sensitivity

Du har kanskje lagt merke til at vårt siste søk ikke returnerte Kubuntu. Med mindre annet er sagt, vil grep anta at du skrev inn uttrykket akkurat slik du ønsket det, og dette gjelder for store og små bokstaver. Hvis du søker etter "ubuntu", men tekstfilen din inneholder "Ubuntu", vil søket ikke finne noe. For å gjøre søkningen uforsiktig, bruk -i- bryteren, som i

 grep -i ubuntu distros.txt 

Hele verden

Med det forrige søket inkluderte du alle kapitaliseringsvarianter av ordet "Ubuntu". Det inkluderte Kubuntu fordi det inneholder ordet du søkte etter. Du vil kanskje bare inkludere standardversjonen, ikke Kubuntu eller Edubuntu, osv. Hvis det er tilfelle, kan du fortelle grep å matche hele ordet bare ved å sende -w- alternativet.

 grep -i ubuntu distros.txt 

Utelukkelse

Mye som du kan bruke grep til å vise bare samsvarende oppføringer, kan du også bruke den til å vise alt, men de tilsvarende oppføringene. For å utvide på våre tidligere søk, kan vi nå bruke -v- alternativet til å reversere resultatene våre og bare vise linjene som ikke samsvarer.

joker~~POS=TRUNC

Grep har full støtte til jokertegn når det passer til mønstre. Når du bruker jokertegn og andre spesialtegn, vil du sørge for at søkemønsteret ditt er i sitater, så Linux-skallet ikke prøver å tolke dem før grep kan. Vanlige jokertegn inkluderer * for grupper av tegn og. å representere en enkelt ukjent karakter.

Ranges

Hvis jokertegnene er litt for store for deg, kan du angi individuelle tegn eller et område som skal inkluderes i søket. Tegn i firkantede parenteser vil bli inkludert i søkemønsteret ditt. For eksempel, hvis du hadde en fil med en liste som

 Vare 1 - Epler Element 2 - Bananer Pos. 3 - Kokosnøtter Element 4 - Ferskener Artikkel 5 - Druer Artikkel 6 - Abrikoser 

Du kan velge et bestemt område ved å bruke noe som

 grep "Element [2-4]" items.txt 

Grep er et utrolig kraftig verktøy, og å lære det grundig kan lønne seg på alle måter. Forstå grep gjør det også mye enklere å gå videre til andre kraftige konsolverktøy som sed og awk. Mellom disse tre verktøyene kan en utrolig mengde konsoll og skript magi gjøres med langt mindre innsats enn mulig. Hvis du er en fan av grep, eller vil se andre verktøy som sed og awk dekket her, vennligst send et notat i kommentarene.