Handledning för Linux reguljära uttryck: Grep Regex Exempel

⚡ Smart sammanfattning

Reguljära uttryck i Linux är specialteckensekvenser som söker i data och matchar komplexa mönster i verktyg som grep, sed och vi, med hjälp av grundläggande, intervall-, utökade och klammerparentesexpansionsformer för att filtrera text exakt.

  • 🔎 Vad de är: Reguljära uttryck, förkortade till regexp eller regex, beskriver textmönster för sökning och matchning.
  • 🧩 Grundläggande set: Symboler som . ^ $ * och \ ankar-, upprepade och escape-tecken i ett mönster.
  • 🔢 Intervall: Klammerparenteser som {n} och {n,m} styr hur många gånger föregående tecken upprepas.
  • Utökad: Med grep -E matchar \+ och \? en eller flera och noll eller en förekomster av ett tecken.
  • 🧵 Tandställningsutvidgning: Lockiga klammerparenteser genererar flera strängar från en sekvens eller en kommaseparerad lista.
  • 🛠️ Var används: Verktyg som grep, sed, tr och vi förlitar sig på reguljära uttryck för att filtrera text.
  • 🤖 AI-hjälp: AI-assistenter och GitHub Copilot kan snabbt generera, förklara och felsöka regex-mönster.

Linux reguljära uttryck med grep — exempel på grundläggande, intervall- och utökade regex

Reguljära uttryck är en av de kraftfullaste funktionerna hos Linux textverktyg, som låter dig matcha, filtrera och transformera data med kompakta mönster. Den här sidan förklarar grund-, intervall- och utökade former, plus expansion av klammerparenteser, med exempel på bearbetade grep.

Vad är Linux Regular Expressions?

Reguljära uttryck i Linux är specialtecken som hjälper till att söka i data och matcha komplexa mönster. Reguljära uttryck förkortas till 'regexp' eller 'regex'. De används i många Linux-program, t.ex. grep, bash, byt namn, sed och mer.

Typer av reguljära uttryck

För att underlätta förståelsen, låt oss lära oss de olika typerna av reguljära uttryck en efter en. Den här sidan täcker grundläggande, intervall- och utökade reguljära uttryck och avslutas med klammerutvidgning.

Grundläggande reguljära uttryck

Några av de vanligaste kommandona som fungerar med reguljära uttryck är tr, sed, vioch grep. Tabellen nedan listar några av de grundläggande reguljära uttrycken.

Symbol BESKRIVNING
. Ersätter valfritt tecken
^ Matchar början av en sträng
$ Matchar slutet av en sträng
* Matchar noll eller fler gånger av föregående tecken
\ Representerar specialtecken
() Grupperar reguljära uttryck
? Matchar exakt ett tecken

Låt oss se ett exempel. Kör först cat sample för att visa innehållet i en befintlig fil, som visas nedan.

cat exempelkommando som visar innehållet i en befintlig fil i terminalen

Sök sedan efter innehåll som innehåller bokstaven 'a'. Skärmdumpen nedan visar hur grep returnerar varje rad som innehåller ett 'a'.

grep söker i exempelfilen efter rader som innehåller bokstaven a

Cirkumflätet '^' matchar början av en sträng. Exemplet nedan söker efter innehåll som börjar med bokstaven 'a'.

grep med ett cirkumflätankare som bara matchar rader som börjar med bokstaven a

Endast rader som börjar med tecknet filtreras. Rader som inte innehåller tecknet 'a' i början ignoreras.

Låt oss titta på ett annat exempel. Skärmdumpen nedan visar återigen innehållet i exempelfilen innan filtrering efter radens slut.

Exempel på filinnehåll som visas innan filtrering av rader som slutar med bokstaven t

Markera endast de rader som slutar på bokstaven 't' med hjälp av ankaret '$', som visas nedan.

grep med ett dollarankare som bara väljer rader som slutar på bokstaven t

Intervall Reguljära uttryck

Dessa uttryck anger antalet förekomster av ett tecken i en sträng. De listas nedan.

Uttryck BESKRIVNING
{inte} Matchar det föregående tecknet som visas "n" gånger exakt
{n,m} Matchar det föregående tecknet som visas "n" gånger men inte mer än m
{n, } Matchar det föregående tecknet endast när det förekommer "n" gånger eller mer

Filtrera till exempel bort alla rader som innehåller tecknet 'p'. Skärmdumpen nedan visar de matchande raderna.

grep filtrerar exempelfilen för rader som innehåller tecknet p

Kontrollera nu att tecknet 'p' förekommer exakt två gånger i en sträng, en gång efter en. Syntaxen för detta är:

cat sample | grep -E p\{2}

Resultatet av intervallmatchen visas nedan.

grep -E intervalluttryck som matchar tecknet p som förekommer exakt två gånger

Obs: Du måste lägga till -E med dessa reguljära uttryck.

Utökade reguljära uttryck

Dessa reguljära uttryck kombinerar mer än ett uttryck. Några av dem är:

Uttryck BESKRIVNING
\+ Matchar en eller flera förekomster av föregående tecken
\? Matchar noll eller en förekomst av föregående tecken

Sök till exempel efter alla förekomster av tecknet 't'. Skärmdumpen nedan visar resultatet.

grep söker i exempelfilen efter alla rader som innehåller tecknet t

Anta att du vill filtrera bort rader där tecknet 'a' föregår tecknet 't'. Du kan använda ett kommando som det nedan:

cat sample|grep "a\+t"

Utdata visas i följande skärmdump.

grep utökat uttryck som matchar ett eller flera a-tecken följt av t

Brace expansion

Syntaxen för klammerutvidgning är antingen en sekvens eller en kommaseparerad lista med objekt inom klammerparenteser '{}'. Start- och slutobjekten i en sekvens separeras med två punkter '..'.

Några exempel visas nedan.

echo-kommandot använder brace-expansion för att generera flera strängar från en sekvens och en lista

I exemplen ovan skapar echo-kommandot strängar med hjälp av parentesexpansion, vilket producerar flera strängar från ett enda mönster.

Vanliga frågor

grep använder enkla reguljära uttryck som standard. egrep aktiverar utökade uttryck (samma som grep -E), och fgrep matchar fasta strängar utan regex (grep -F). Moderna GNU grep markerar egrep och fgrep som föråldrade, så föredrar grep -E och grep -F.

Teckenklasser matchar en kategori av tecken. Hakparentesuttryck som [az] matchar ett intervall, medan POSIX-klasser som [[:alpha:]], [[:digit:]] och [[:space:]] matchar bokstäver, siffror och blanksteg. De håller mönster läsbara och portabla mellan olika språkinställningar.

Lägg till alternativet -i, till exempel grep -i "hello" exempel. Detta matchar både Hello, HELLO och hello. Utan -i är reguljära uttryck skiftlägeskänsliga, så en stor bokstav och dess gemener behandlas som två olika tecken.

Shell-jokertecken (globbing) utökar filnamn, där * betyder valfritt tecken och ? betyder ett tecken. Reguljära uttryck matchar text inuti filer, där * betyder noll eller fler av föregående tecken. Samma symboler betyder olika saker i varje sammanhang.

Använd alternativet -o, till exempel grep -o “a\+t” exempel. Istället för att skriva ut hela raden skriver grep bara ut den del som matchar mönstret, en matchning per rad. Det är användbart för t.ex.tracvärden som e-postadresser eller nummer.

Använd alternering med pipe-symbolen. I utökat läge matchar grep -E “cat|dog” exempel rader som innehåller cat eller dog. I grundläge måste du escape det som grep “cat\|dog” exempel. Alternation låter ett kommando söka efter flera mönster samtidigt.

AI-assistenter kan omvandla en beskrivning på ett enkelt språk till en fungerande regex, förklara vad ett kryptiskt mönster gör och föreslå korrigeringar när en matchning misslyckas. Maskininlärningsverktyg upptäcker också återkommande mönster i stora loggfiler som skulle vara mödosamma att skriva för hand.

Ja. GitHub Copilot föreslår grep-kommandon och reguljära uttryck direkt från en kommentar eller ett partiellt mönster medan du skriver. Det snabbar upp skrivandet av komplexa uttryck, men du bör testa alla genererade mönster mot verkliga exempeldata innan du förlitar dig på dem.

Sammanfatta detta inlägg med: