Linux-metategn og deres betydning

Et metategn er ethvert tegn som har en spesiell betydning, for eksempel en karat (^), dollartegn ($) eller en stjerne (*). Linux har en god del av disse metategnene, og deres betydninger varierer avhengig av hvilke Linux kommando eller programmet du bruker.

Punktum som metakarakter (.)

Punktum (.) indikerer gjeldende posisjon når du kjører kommandoer som f.eks cd, finne, eller sh. I applikasjoner som f.eks awk, grep, og sed, det er et jokertegn som angir et spesifikt antall av et hvilket som helst tegn.

Som et eksempel finner følgende kommando alle MP3-filer i gjeldende mappe og dens undermapper.

finne. -type f -navn '*.mp3'

Hvis du kjører den kommandoen i den nåværende arbeidskatalogen (pwd), vil du se resultater returnert, forutsatt at du beholder MP3-filer i en musikkmappe i hjemmemappen.

Se nå på denne kommandoen:

ps -ef | grep f..efox

ps-kommandoen viser alle de kjørende prosessene på datamaskinen din. grep-kommandoen tar linjer med input og søker etter et mønster.

Linux-punktkarakter

Kommandoen ps -ef henter en liste over kjørende prosesser. Røret (

|) metategn sender den listen til grep-kommandoen, som søker etter en hvilken som helst linje i listen som inneholder f..efox, der punktum refererer til to av en hvilken som helst karakter.

Hvis Firefox kjører, får du en match. På samme måte, hvis et program kalt fonefox eller freefox kjører, returneres disse også.

Hvis du bare trenger å søke etter et enkelt tegn, i stedet for å bruke punktum (.) metategn, bruk? metakarakter. Bruker? metategn refererer til et enkelt tegn enten på begynnelsen eller slutten av mønsteret.

Stjernen som metategn (*)

Stjernen (*) er en universelt kjent metakarakter. Det betyr null eller mer av alle tegn når du søker etter et mønster. For eksempel:

ls *.flac
Linux-stjerneoppføring

De *.flac del av kommandoen returnerer et samsvar for alle filnavn som ender på .flac. På samme måte kan du bruke stjernen med grep-kommandoen i den siste delen som følger:

ps -ef | grep f*efox

Dette skiller seg litt fordi stjernen betyr null eller mer, så i tillegg til å finne firefox, facefox og fonefox, finner den også flutefox, ferretfox og fefox.

Linux-stjernetegn

Karaten som metakarakter (^)

Karaten (^) brukes til å angi starten på en linje eller en streng. Så hvordan brukes det?

Kommandoen ls viser filene i en mappe, som følger:

ls -a

Hvis du vil liste filene i en mappe som begynner med en bestemt streng, for eksempel gnome, kan karaten brukes til å spesifisere den strengen. For eksempel:

ls -a | grep ^gnome

Dette viser filene som starter med gnome. Hvis du vil ha filer som har gnome hvor som helst i filnavnet, bruk stjernen.

Linux karat karakter

I eksemplet ovenfor returnerer ls-kommandoen en liste over filnavn og sender den listen til grep-kommandoen, som brukes til mønstertilpasning. Grep vet at karatsymbolet betyr å finne alt som begynner med tegnene som kommer etter det, og i dette tilfellet er det gnome.

Dollarsymbolet som et metategn ($)

Dollarsymbolet ($) har flere betydninger som et metategn i Linux. Når det brukes til å matche mønstre, betyr det det motsatte av karat og betegner ethvert mønster som ender med en bestemt streng. For eksempel:

ls | grep png$

Dette viser alle filer som slutter med png.

Dollarsymbolet brukes også for å få tilgang til miljøvariabler i bash-skallet. For eksempel:

#! /bin/bash
eksport hund=molly
ekko $hund
Linux dollartegn

Køen eksport hund=molly oppretter en miljøvariabel kalt hund og setter verdien molly. For å få tilgang til miljøvariabelen, bruk $-symbolet. Med $-symbolet vil ekko $hund uttalelsen viser molly. Uten den ekko hund uttalelse viser ordet hund.

Escapende metategn (\\)

Noen ganger vil man ikke at metakarakteren skal ha en spesiell betydning. For eksempel hvis en fil kalles f.refox og en annen fil kalles firefox.

Se nå på følgende kommando:

ls | grep f.refox

Hva tror du er returnert? Både f.refox og firefox returneres fordi begge samsvarer med mønsteret.

Linux escape karakter

For bare å returnere f.refox, unnslipp punktum for å faktisk bety punktum, som følger:

ls | grep f\\.refox

Klammer som et metategn ([])

Du kan bruke parentes ([ ]) når du søker etter mønstre. Klammer angir spesifikke bokstaver for å matche hvor som helst i mønsteret. For eksempel:

ls | grep [abc]

Dette viser alle filer som inneholder bokstavene a, b eller c.

Linux-parentestegn

Du kan bruke parentes i begynnelsen, slutten eller midt i et søkemønster.

For å søke etter en rekke bokstaver, bruk bindestrek (-). For eksempel, ls [a-h]* returnerer filer som starter med en hvilken som helst bokstav fra a til h.

Aksentgravens metakarakter

I eksemplene ovenfor sender pipe-metakarakteren resultatene av én kommando (som ls-kommandoen) til en annen kommando (som grep-kommandoen).

En alternativ måte å gjøre dette på er å bruke baksitatet, også kjent som aksentgraven (`), for å sette inn resultatene av en kommando i en annen kommando. For å gjøre dette, lagre resultatet av én kommando i en variabel. For eksempel:

kommando=`ls -lah`
ekko $kommando
Linux backtick-karakter

Eksemplet er superkonstruert, og du vil sannsynligvis aldri gjøre noe sånt, men du kan se hvordan det fungerer. Backtick-tegnet kjører en kommando og lagrer resultatet. Dette kan være nyttig i skripting, men det er mindre fleksibelt enn å bruke pipen til enkle kommandoer.

Vanlige metakarakterer og deres betydninger

Karakter Betydning
. Hvilken som helst karakter.
* Null eller flere tegn.
^ Match en hvilken som helst linje eller streng som starter med et mønster (for eksempel ^gnome).
$ Match en hvilken som helst linje eller streng som slutter med et mønster (for eksempel gnome$).
\ Escapes neste karakter for å fjerne dens spesielle betydning.
[] Match en av en liste eller et område (for eksempel ["abc", "def"] eller [1..9]).
+ Match en eller flere foregående (for eksempel grep a+).
? Match null eller én foran.