Nybörjarguide för regelbundna uttryck
Har du någonsin försökt hitta ett återkommande mönster i en bit text? Du kanske har använt något som sökfunktionen i din webbläsare eller ordbehandlare, men när du behöver hitta något mer komplext kan det vara som att hitta en nål i den proverbiala höstacken.
Lyckligtvis finns det ett sätt att plocka ut exakta mönster i texten helt ner till karaktären. Det heter regelbundna uttryck, och det låter dig bli en mästare i att söka igenom text.
Om du har uppmärksammat Linux-verktygen märker du förmodligen att de ofta använder sig av något som kallas reguljära uttryck. Även om Unix och Linux gjorde dem populära, finns reguljära uttryck tillgängliga i en rad olika paket, inklusive Microsoft Word.
Regelbundna uttryck används mest i flera noterbara Linux-program, inklusive grep (som står för Global Regular Expression Print), Awk och Sed.
Det är bättre att tänka på reguljära uttryck som ett litet språk, vars grunder kan beskrivas i ett litet utrymme.
Du kan söka använda verktyg som Grep eller Ack från antingen standardinmatningen eller en textfil.
Om du till exempel försökte hitta termen "Firefox" i produktionen från PS-kommandot, så här är hur du skulle göra det:
ps | grep firefox
Och här är hur du hittar termen "maketecheasier" i en fil.
grep maketecheasier somefile
metatecken
I vanliga uttryck kan du också söka efter delar av en sträng. Sättet du skulle göra här är med två tecken. De kallas faktiskt metakarakter. De liknar de jokertecken som du kanske har använt i skalet.
- Msgstr "" "står för en enda karaktär. Mönstret "ct" matchar både orden "katt", "cut" och "cot".
- Metacharacteren "*" betyder att man hittat föregående tecken 0 eller flera gånger. Mönstret "l. * X" skulle hitta "linux", liksom alla andra ord som råkade passa samma mönster.
Anledningen till att du bara inte kan använda något som "l*x"
som du skulle ha i skalet är att matcha 0 eller fler tecken betyder att det skulle hitta linjer som inte hade en "l" följd av någon annan karaktär. Med andra ord, vilken linje som helst som försöker matchas, vilket är absolut värdelös.
Hitta mönster i början eller slutet
Du kan också hitta mönster som börjar i början eller slutet av raderna.
- Tecknet "^" matchar i början
- "$" Matchade i slutet.
Till exempel skulle "sier$"
matcha "Make Tech Easier" och "^Make"
skulle matcha "Make."
Hitta matchning i ett intervall
Du kan också komma in i mer komplicerade tecken. Allt du lägger i kvadratkonsoler kommer att matchas som ett intervall. Till exempel matchar " [az]
" alla små bokstäver. " [a-zA-Z]
" matchar alla bokstäver. " [a-zA-Z0-9]
" matchar alfanumeriska tecken. Inne i parentesen negerar tecknet "^" något. " [^a-zA-Z]
" matchar allt som inte är ett brev.
Du kan också hitta ordgränser med " \<
" och " \>
" "tecken. Mönstret " \
" matchar "Linux", uppenbarligen.
Du kan matcha något specifikt antal gånger med lockiga fästen. " {3}
" matchar något tre gånger och " {3, 5}
" matchar något mellan 3 och 5 gånger.
Med dessa enkla byggstenar kan du matcha några ganska komplicerade saker. Det finns mycket mer till vanliga uttryck än vad som kan förklaras i en kort artikel. Om du vill ha en omfattande boklängdsbehandling av ämnet ska du definitivt kolla in Mastering Regular Expressions av Jeffrey EF Friedl.
Upplysning: Denna artikel innehåller en affiliate länk. Medan vi bara skriver om produkter som vi tror förtjänar att vara på denna sida, kan Tech Tech Easier tjäna en liten provision om du klickar igenom och köper produkten i fråga.
Bildkredit: xkcd