Bash mønster matching

Bash mønster matching

Bash Pattern Matching er et uunnværlig konsept som kommer godt med når du velger forskjellige filnavn fra en katalog og sjekker om en streng samsvarer med et gitt format. Enten du begynner med bash mønstermatching eller ønsker å pusse opp ferdighetene dine, dekker denne guiden de forskjellige måtene og tipsene for mønstermatching.

Mønstermatching

Bash tilbyr hovedsakelig to typer mønstermatching: Globs og utvidede kloder. De to tilbyr enkle måter for brukere å velge filnavn og sjekke de forskjellige strengene mot spesifikke regler. Bash støtter imidlertid også å bruke regex, Spesielt når du jobber med skript for å validere forskjellige brukerinngangs- og analyseringsdata.

1. Bash mønster matching med globs

Glob -mønstermatching innebærer hovedsakelig å sjekke for spesifikke filnavn i en gitt katalog. De blir referert til som jokertegn. Det er tre typer bash glob -mønstre:

2. Asterisk (*)

Det brukes når du vil matche null eller flere filnavn.

La oss ha noen eksempler.

Sjekke filnavn som starter eller slutter med et gitt karakter

For eksempel, hvis vi trengte å søke etter en fil som begynner med l eller li, Vi kan bruke følgende kommandoer:

ls l*
ls li*

Legg merke til hvordan det samsvarer med alle filnavnene som starter med Li eller L i den gjeldende katalogen, inkludert katalogene.

For bare å matche kataloger, legg til / etter jokertegnet, som vist i følgende:

Tilsvarende, hvis vi trengte å matche filnavnene den ende med en gitt karakter eller tegn, vi kan bruke jokertegnet som vist i følgende illustrasjon. I dette eksemplet samsvarer vi med filnavnene som ender med e.

ls *e

Anta at du er usikker på filnavnet du vil søke etter, men du kjenner de gitte karakterene. Som i følgende eksempel, kan du fremdeles matche filnavnene ved å legge til jokertegnet før og etter karakterene.

Vi matchet filnavnene som inkluderer nux nøkkelord i navnet deres.

Kontrollere filer med en gitt utvidelse

Med Bash -mønstermatching kan du finne filene med en gitt utvidelse. For eksempel, hvis du vil finne alle PDF -er eller tekstfiler. I så fall legger du til jokertegnet før filtypen. La oss se følgende eksempel for å matche alle tekstfilene:

ls *.tekst

Alle tekstfilene blir matchet som vist i følgende:

3. Spørsmålstegn (?)

Spørsmålet Mark Wildcard samsvarer med filnavnene som samsvarer med en enkelt karakter. Du må imidlertid vite antall tegn som et gitt filnavn har, slik at hver "?”Representerer hver karakter.

For å matche et filnavn med fire tegn, men vi vet den siste karakteren, kan vi for eksempel ha følgende eksempel:

ls ???e

Tilsvarende, for å finne en gitt utvidelse der du vet antall tegn i filnavnet, kan vi bruke følgende kommando:

ls ?????.tekst

4. Firkantede parenteser []

Når du vil ha et mer spesifikt søk, for eksempel å matche filnavnene som inneholder de gitte tegnene, kan karakterene som matcher legges til i de firkantede parentesene.

For å matche filnavnene som inneholder alle tegn eller tall som er spesifisert uavhengig av utvidelsen, kan vi for eksempel ha følgende kommando:

ls [e-m]*.*

Her samsvarer vi med filnavnene som inneholder ethvert tegn fra E til M og har noen utvidelse.

Hvis du ønsket å matche filnavnene som starter med spesifikke tegn, la oss si å starte med [F-L] og ha en gitt utvidelse, kan vi bruke følgende mønster:

ls [f-l]*.tekst*

5. Bash mønster matching med utvidede globs

Utvidede kloder har en stor likhet med vanlige uttrykk. Imidlertid er de slått av som standard. Når du må bruke dem, må du slå dem på ved hjelp av følgende kommando:

$ shopt -s extglob

De utvidede klodene inkluderer:

6. ?(mønstre)

Det brukes når du samsvarer med null eller en forekomst av det spesifiserte mønsteret.

For eksempel, hvis du vil matche alle filnavnene med en gitt utvidelse eller de som inneholder spesifikke tegn i navngivningen, kan vi ha følgende kommando:

$ ls ?(* nux* |*.sh)

7. *(mønstre)

Det brukes når du samsvarer med null eller mer Forekomster av det spesifiserte mønsteret.

For eksempel kan vi bruke følgende kommando for å matche filnavnene som starter med null eller mer "F" og er tekstfiler:

$ ls *(f).tekst

8. +(mønstre)

Det brukes når du samsvarer med en eller fler Forekomster av det spesifiserte mønsteret.

Hvis vi kjører forrige kommando, må du merke deg at den bare samsvarer med filnavnene som må inneholde minst en "F", noe som betyr at .tekst Filen vil ikke være en kamp.

$ LS +(f).tekst

9. @(mønstre)

Det brukes når du samsvarer med en forekomst av det spesifiserte mønsteret.

Hvis vi bare trenger å matche filnavnene som bare inneholder ett "f" ved å bruke det samme mønsteret som brukes i forrige eksempel, kan vi bruke @ som vist i følgende:

$ ls @(f).tekst

10. !(mønstre)

Det brukes når du vil matche alt annet som ikke samsvarer med det spesifiserte mønsteret.

La oss ha et eksempel der vi vil matche alle filnavnene som ikke har det spesifiserte mønsteret. I dette eksemplet samsvarer vi med alle filnavnene som ikke er tekstfiler eller bash -skript. Kommandoen er som følger:

$ ls !(*.txt |*.sh)

Konklusjon

Denne guiden presenterte bash mønstermatching og de forskjellige eksemplene for å sikre at du forstår hvordan du jobber med de forskjellige mønstermatchingsalternativene. Ved hjelp av dette fundamentet kan du fremme bash -mønsteret og bruke den samme logikken når du vil matche de forskjellige mønstrene på terminalen eller når du oppretter bash -skriptene.