Linux Regular Expression Tutorial: Grep Regex Eksempel

โšก Smart oppsummering

Regelmessige uttrykk i Linux er spesielle tegnsekvenser som sรธker i data og matcher komplekse mรธnstre pรฅ tvers av verktรธy som grep, sed og vi, ved hjelp av grunnleggende, intervall-, utvidede og klammeparentesutvidelsesformer for รฅ filtrere tekst presist.

  • ๐Ÿ”Ž Hva de er: Regulรฆre uttrykk, forkortet til regexp eller regex, beskriver tekstmรธnstre for sรธk og matching.
  • ๐Ÿงฉ Grunnsett: Symboler som . ^ $ * og \ anker-, gjentakelses- og escape-tegn i et mรธnster.
  • ๐Ÿ”ข Intervall: Klammer som {n} og {n,m} styrer hvor mange ganger det foregรฅende tegnet gjentas.
  • โž• Forlenget: Med grep -E, \+ og \? matcher รฉn-eller-flere og null-eller-รฉn forekomster av et tegn.
  • ๐Ÿงต Utvidelse av tannregulering: Krรธllete klammeparenteser genererer flere strenger fra en sekvens eller en kommaseparert liste.
  • ๐Ÿ› ๏ธ Hvor brukt: Verktรธy som grep, sed, tr og vi er avhengige av regulรฆre uttrykk for รฅ filtrere tekst.
  • ๐Ÿค– AI-hjelp: AI-assistenter og GitHub Copilot kan raskt generere, forklare og feilsรธke regex-mรธnstre.

Linux-regulรฆre uttrykk med grep โ€“ eksempler pรฅ grunnleggende, intervall- og utvidet regex

Regulรฆre uttrykk er en av de kraftigste funksjonene i Linux tekstverktรธy, som lar deg matche, filtrere og transformere data med kompakte mรธnstre. Denne siden forklarer de grunnleggende, intervall- og utvidede formene, pluss utvidelse av parenteser, med eksempler pรฅ utarbeidede grep.

Hva er regulรฆre Linux-uttrykk?

Linux-regulรฆre uttrykk er spesialtegn som hjelper med รฅ sรธke i data og finne komplekse mรธnstre. Regulรฆre uttrykk forkortes som ยซregexpยป eller ยซregexยป. De brukes i mange Linux-programmer, f.eks. grep, bash, endre navn, sed og mer.

Typer regulรฆre uttrykk

For รฅ gjรธre det enklere รฅ forstรฅ, la oss lรฆre de ulike typene regulรฆre uttrykk รฉn etter รฉn. Denne siden dekker grunnleggende, intervall- og utvidede regulรฆre uttrykk, og avsluttes med utvidelse av parenteser.

Grunnleggende regulรฆre uttrykk

Noen av de vanligste kommandoene som fungerer med regulรฆre uttrykk er tr, sed, vi, og grep. Tabellen nedenfor viser noen av de grunnleggende regulรฆre uttrykkene.

symbol Tekniske beskrivelser
. Erstatter et hvilket som helst tegn
^ Samsvarer med starten av en streng
$ Samsvarer med slutten av en streng
* Samsvarer null eller flere ganger med det foregรฅende tegnet
\ Representerer spesialtegn
() Grupperer regulรฆre uttrykk
? Samsvarer med nรธyaktig ett tegn

La oss se pรฅ et eksempel. Kjรธr fรธrst cat sample for รฅ vise innholdet i en eksisterende fil, som vist nedenfor.

cat eksempelkommando som viser innholdet i en eksisterende fil i terminalen

Sรธk deretter etter innhold som inneholder bokstaven ยซaยป. Skjermbildet nedenfor viser grep som returnerer hver linje som inneholder en ยซaยป.

grep sรธker i eksempelfilen etter linjer som inneholder bokstaven a

Cirkumflekstegnet '^' samsvarer med starten av en streng. Eksemplet nedenfor sรธker etter innhold som starter med bokstaven 'a'.

grep med et cirkumfleksanker som bare matcher linjer som starter med bokstaven a

Bare linjer som starter med tegnet filtreres. Linjer som ikke inneholder tegnet 'a' i starten ignoreres.

La oss se pรฅ et annet eksempel. Skjermbildet nedenfor viser igjen innholdet i eksempelfilen fรธr filtrering etter slutten av en linje.

Eksempel pรฅ filinnhold vist fรธr filtrering av linjer som slutter med bokstaven t

Velg bare de linjene som slutter med bokstaven 't' ved รฅ bruke '$'-ankeret, som vist nedenfor.

grep med et dollaranker som bare velger linjer som slutter pรฅ bokstaven t

Intervall Regulรฆre uttrykk

Disse uttrykkene angir antall forekomster av et tegn i en streng. De er listet opp nedenfor.

Uttrykk Tekniske beskrivelser
{N} Tilsvarer det foregรฅende tegnet som vises 'n' ganger nรธyaktig
{n,m} Matcher det foregรฅende tegnet som vises 'n' ganger, men ikke mer enn m
{n, } Matcher det foregรฅende tegnet bare nรฅr det vises 'n' ganger eller mer

For eksempel, filtrer ut alle linjer som inneholder tegnet 'p'. Skjermbildet nedenfor viser de samsvarende linjene.

grep filtrerer eksempelfilen for linjer som inneholder tegnet p

Sjekk nรฅ at tegnet 'p' forekommer nรธyaktig to ganger i en streng, รฉn etter den andre. Syntaksen for dette er:

cat sample | grep -E p\{2}

Resultatet av intervallkampen vises nedenfor.

grep -E intervalluttrykk som samsvarer med tegnet p som vises nรธyaktig to ganger

Merk: Du mรฅ legge til -E med disse regulรฆre uttrykkene.

Utvidede regulรฆre uttrykk

Disse regulรฆre uttrykkene kombinerer mer enn ett uttrykk. Noen av dem er:

Uttrykk Tekniske beskrivelser
\+ Tilsvarer รฉn eller flere forekomster av det forrige tegnet
\? Tilsvarer null eller รฉn forekomst av det forrige tegnet

For eksempel, sรธk etter alle forekomster av tegnet 't'. Skjermbildet nedenfor viser resultatet.

grep sรธker i eksempelfilen etter alle linjer som inneholder tegnet t

Anta at du vil filtrere ut linjer der tegnet 'a' kommer fรธr tegnet 't'. Du kan bruke en kommando som den nedenfor:

cat sample|grep "a\+t"

Utdataene vises i fรธlgende skjermbilde.

grep utvidet uttrykk som matcher ett eller flere a-tegn etterfulgt av t

Utvidelse av bรธyle

Syntaksen for utvidelse av parenteser er enten en sekvens eller en kommaseparert liste med elementer innenfor krรธllparenteser '{}'. Start- og sluttelementene i en sekvens er atskilt med to punktum '..'.

Noen eksempler er vist nedenfor.

echo-kommando ved bruk av utvidelse av braces for รฅ generere flere strenger fra en sekvens og en liste

I eksemplene ovenfor lager echo-kommandoen strenger ved hjelp av parentesutvidelse, og produserer flere strenger ut av et enkelt mรธnster.

Spรธrsmรฅl og svar

grep bruker grunnleggende regulรฆre uttrykk som standard. egrep aktiverer utvidede uttrykk (det samme som grep -E), og fgrep matcher faste strenger uten regex (grep -F). Moderne GNU grep markerer egrep og fgrep som utdaterte, sรฅ foretrekker grep -E og grep -F.

Tegnklasser samsvarer med en kategori av tegn. Parentesuttrykk som [az] samsvarer med et omrรฅde, mens POSIX-klasser som [[:alpha:]], [[:digit:]] og [[:space:]] samsvarer med bokstaver, tall og mellomrom. De holder mรธnstre lesbare og bรฆrbare pรฅ tvers av forskjellige sprรฅkinnstillinger.

Legg til -i-alternativet, for eksempel grep -i ยซhelloยป-eksempel. Dette samsvarer med bรฅde Hello, HELLO og hello. Uten -i skiller regulรฆre uttrykk mellom store og smรฅ bokstaver, sรฅ en stor bokstav og dens smรฅ bokstavform behandles som to forskjellige tegn.

Shell-jokertegn (globbing) utvider filnavn, der * betyr et hvilket som helst tegn og ? betyr ett tegn. Regulรฆre uttrykk matcher tekst i filer, der * betyr null eller flere av det foregรฅende tegnet. De samme symbolene betyr forskjellige ting i hver kontekst.

Bruk -o-alternativet, for eksempel grep -o โ€œa\+tโ€ eksempel. I stedet for รฅ skrive ut hele linjen, skriver grep bare ut den delen som samsvarer med mรธnsteret, ett treff per linje. Det er nyttig for eksempeltracverdier som e-postadresser eller tall.

Bruk alternering med pipe-symbolet. I utvidet modus matcher grep -E โ€œcat|dogโ€ sample linjer som inneholder cat eller dog. I basismodus mรฅ du escape det som grep โ€œcat\|dogโ€ sample. Alternering lar รฉn kommando sรธke etter flere mรธnstre samtidig.

AI-assistenter kan gjรธre en enkel engelsk beskrivelse om til en fungerende regex, forklare hva et kryptisk mรธnster gjรธr og foreslรฅ rettelser nรฅr et treff mislykkes. Maskinlรฆringsverktรธy oppdager ogsรฅ tilbakevendende mรธnstre i store loggfiler som ville vรฆre kjedelige รฅ skrive for hรฅnd.

Ja. GitHub Copilot foreslรฅr grep-kommandoer og regulรฆre uttrykk direkte fra en kommentar eller et delvis mรธnster mens du skriver. Det fremskynder skrivingen av komplekse uttrykk, men du bรธr teste ethvert generert mรธnster mot ekte eksempeldata fรธr du stoler pรฅ det.

Oppsummer dette innlegget med: