Har du noen gang prøvd å finne et gjentakende mønster i et stykke tekst? Du har kanskje brukt noe som søkefunksjonen i nettleseren din eller tekstbehandleren, men når du trenger å finne noe mer komplekst, kan det være som å finne en nål i den ordspråklige haystacken.

Heldigvis er det en måte å plukke ut presise mønstre i tekst helt ned til tegnet. Det kalles vanlige uttrykk, og det lar deg bli en mester for å søke gjennom tekst.

Hvis du har betalt noe for Linux-verktøy, merker du sannsynligvis at de ofte bruker noe som kalles regulære uttrykk. Selv om Unix og Linux gjorde dem populære, finnes vanlige uttrykk i en rekke pakker, inkludert Microsoft Word.

Vanlige uttrykk brukes mest i flere bemerkelsesverdige Linux-programmer, inkludert grep (som står for Global Regular Expression Print), Awk og Sed.

Det er bedre å tenke på regulære uttrykk som et lite språk, hvis grunnleggende kan beskrives i et lite rom.

Du kan søke etter verktøy som Grep eller Ack fra enten standardinngangen eller en tekstfil.

For eksempel, hvis du prøvde å finne termen "Firefox" i produksjonen fra ps-kommandoen, kan du gjøre det her:

 ps | grep firefox 

Og her er hvordan du finner ordet "maketecheasier" i en fil.

 grep maketecheasier somefile 

metategn

I vanlige uttrykk kan du også søke etter deler av en streng. Måten du vil gjøre dette på, er med to tegn. De kalles faktisk metakarakterer. De ligner på wildcard-kamper du kanskje har brukt i skallet.

  • "." Står for en enkelt karakter. Mønsteret "ct" passer både til ordene "katt", "kutt" og "barneseng" for eksempel.
  • Metakarakteren "*" betyr å finne den forrige karakteren 0 eller flere ganger. Mønsteret "l. * X" ville finne "linux", så vel som andre ord som skjedde for å passe til det samme mønsteret.

Grunnen til at du bare ikke kan bruke noe som "l*x" som du ville ha i skallet, er fordi matchende 0 eller flere tegn betyr at det ville finne linjer som ikke hadde en "l" etterfulgt av noe annet tegn. Med andre ord, en hvilken som helst linje som prøver å bli matchet, noe som er absolutt ubrukelig.

Finne mønstre i begynnelsen eller slutten

Du kan også finne mønstre som begynner på begynnelsen eller slutten av linjene.

  • Karakteren "^" samsvarer i begynnelsen
  • "$" Matchet på slutten.

For eksempel vil "sier$" matche "Gjør teknikk lettere" og "^Make" vil matche "Make."

Finne kamp i et utvalg

Du kan også komme inn i mer kompliserte tegn. Alt du legger i firkantede parenteser, blir matchet som et utvalg. For eksempel matcher " [az] " alle små bokstaver. " [a-zA-Z] " samsvarer med alle bokstavene. " [a-zA-Z0-9] " matcher alfanumeriske tegn. Inne i parentesene negerer karakteren "^" noe. " [^a-zA-Z] " samsvarer med alt som ikke er et brev.

Du kan også finne ordgrenser med " \< " og " \> " tegnene. Mønsteret " \ " samsvarer med "Linux", tydeligvis.

Du kan matche noe bestemt antall ganger med krøllede parenteser. " {3} " matcher noe tre ganger og " {3, 5} " samsvarer noe mellom 3 og 5 ganger.

Med disse enkle byggeblokkene kan du matche noen ganske kompliserte ting. Det er mye mer til vanlige uttrykk enn det som kan forklares i en kort artikkel. Hvis du vil ha en omfattende boklengdsbehandling av emnet, bør du definitivt sjekke ut Mastering Regular Expressions av Jeffrey EF Friedl.

Opplysning: Denne artikkelen inneholder en tilknyttet link. Mens vi bare skriver om produkter vi tror fortjener å være på dette nettstedet, kan Make Tech Easier tjene en liten provisjon hvis du klikker og kjøper produktet.

Bildekreditt: xkcd