Begynnerveiledningen til vanlige uttrykk
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