Kaj so Linux Metacharacters in kako jih uporabljate

V Wikipediji je metacharacter katerikoli znak, ki ima poseben pomen, kot je karat (^), znak za dolar ($) ali zvezdica (*).

Kar zadeva Linux, obstajajo precej števila teh meta-karakterov in njihov pomen se razlikuje glede na kateri ukaz ali program se izvaja.

Polna zaustavitev kot metakarakter (.)

Skromna popolna postaja se uporablja za donacijo trenutnega položaja pri zagonu ukazov, kot so cd , find ali sh, vendar znotraj aplikacij, kot so awk , grep in sed , se uporablja za označevanje katerega koli znaka.

Na primer, naslednji ukaz najde vse mp3 datoteke v trenutni mapi in spodaj.

najti . -name * .mp3

Če boste zagnali ta ukaz pri predstavitvi delovnega imenika (pwd), boste verjetno dobili vrnjene rezultate, ob predpostavki, da shranite datoteke mp3 v glasbeno mapo v domači mapi.

Oglejte si ta ukaz:

ps -ef | grep f..efoks

Ukaz ps navaja vse teče procese v računalniku. Ukaz grep ima linije vnosa in išče vzorec.

Zato ukaz ps-ef dobi seznam tekočih procesov in ga dobi grep, ki išče katero koli vrstico na seznamu, ki ima f.efoks, kjer je. lahko pomeni vsak znak.

Če imate nameščen firefox, boste dobili tekmo. Podobno bo, če imate program, imenovan fonefox ali freefox tekmovanje, vrnjen tudi.

Zvezdica kot metacharacter (*)

Zvezdica je bolj splošno znani metacharacter in se pri iskanju vzorca uporablja 0 ali več.

Na primer:

najti . -name * .mp3

* .mp3 vrne ujemanje za poljubno ime datoteke, ki se konča v .mp3. Podobno bi z zvezdico z grep ukazom lahko uporabil naslednji prikaz:

ps -ef | grep F * efox

Treba je omeniti, da se to nekoliko razlikuje, ker zvezdica pomeni nič ali več, prav tako pa lahko najdete tudi Firefox, facefox in fonefox, lahko pa najdejo tudi flutefox, ferretfox in celo samo fefox.

Karat kot Metacharacter (^)

Karat (^) se uporablja za označitev začetka črt ali nizov. Torej, kako se uporablja?

Ukaz ls se uporablja za seznam vseh datotek v mapi, kot sledi:

ls

Če želite poznati vse datoteke v mapi, ki se začne z določenim nizom, kot je "gnome", se lahko karat uporabi za določitev tega niza.

Na primer:

ls | grep ^ gnome

Upoštevajte, da to samo seznam datotek, ki se začnejo z gnome. Če želite datoteke, ki imajo gnome v imenu datoteke kjerkoli, se boste znova vrnili v zvezdico.

V zgornjem primeru ls vrne seznam imen datotek in ta seznam prenese na grep, ki se uporablja za ujemanje vzorcev. grep ve, da simbol karata najde vse, kar se začne z znaki, ki pridejo po njej, in v tem primeru je gnome.

Dollar simbol kot Metacharacter ($)

Simbol dolarja ima lahko več pomenov kot metacharacter znotraj Linuxa.

Če se uporablja za ujemanje vzorcev, to pomeni nasprotno karat in označuje kateri koli vzorec, ki se konča z določenim nizom.

Na primer:

ls | grep png $

S tem so navedene vse datoteke, ki se končajo s png.

Simbol dolarja se uporablja tudi za dostop do spremenljivk okolja znotraj bash lupine.

Na primer:

izvoz pes = molly
echo $ pes

Izpis vrstice = molly ustvarja spremenljivko okolja, imenovano pes, in postavlja vrednost molly. Za dostop do spremenljivke okolja se uporablja simbol $. S simbolom $ se izjava echo $ dog prikaže molly, vendar brez nje, izjava o echo pesu samo prikaže besedo pes.

Izhajajoči metakarakteri

Včasih ne želite, da ima metacharacter poseben pomen. Kaj, če imate datoteko, imenovano f.refox, in datoteko, imenovano firefox.

Oglejte si naslednji ukaz:

ls | grep f.refox

Kaj misliš, da se vrne? Oba f.refox in firefox se vrnejo, ker se obe ujemata z vzorcem.

Če želite vrniti samo f.refox, se morate izogniti polni postavi, da bi dejansko pomenili popolno postajo, kot sledi:

ls | grep f \\. refox

Skupni metacharacters in njihov pomen

Seznam Metacharacters Linuxa
Znak Pomen
. Vsak znak
* Nič ali več znakov
^ Ujemanje katere koli vrstice ali niza, ki se začne z vzorcem (npr. ^ Gnome)
$ Ujemanje katere koli vrstice ali niza, ki se konča z vzorcem (npr. Gnome $)
\ Izhaja iz naslednjega znaka, da odstrani njen poseben pomen
[] Ujemanje ene izmed seznamov ali obsegov (npr. ["Abc", "def"] ali [1..9]
+ Ujemanje ene ali več predhodnih (npr. Grep a +)
? Ujemanje nič ali eno predhodno