Co jsou linuxové metacharactery a jak je používáte?

Podle Wikipedie je metacharakter libovolný znak, který má zvláštní význam, jako karát (^), znak dolaru ($) nebo hvězdičku (*).

Pokud jde o Linux, existuje poměrně mnoho těchto metacharacterů a jejich významy se liší v závislosti na tom, který příkaz nebo program, který používáte.

Plná zastávka jako metacharakter (.)

Pokorná plná zastávka slouží k darování aktuální pozice při spouštění příkazů, jako je cd , find nebo sh, ale v aplikacích jako awk , grep a sed se používá k označení libovolného znaku.

Například následující příkaz najde všechny soubory mp3 v aktuální složce a níže.

najít. -name * .mp3

Pokud spustíte tento příkaz ve vašem pracovním adresáři (pwd), pravděpodobně budete mít vrácené výsledky za předpokladu, že budete mít soubory mp3 v hudebním složku v domovské složce.

Nyní se podívejte na tento příkaz:

ps -ef | grep f..efox

Příkaz ps uvádí všechny spuštěné procesy v počítači. Příkaz grep vezme řadu vstupů a vyhledá vzor.

Proto příkaz ps -ef dostane seznam spuštěných procesů a dává jej grepovi, který hledá libovolný řádek v seznamu, který má f..efox kde. může znamenat jakoukoli postavu.

Pokud máte firefox běh, dostanete zápas. Stejně tak, pokud máte program nazvaný fonefox nebo freefox, budou také vráceny.

Hvězdička jako metacharakter (*)

Hvězdička je více všeobecně známou metacharakteru a používá se při hledání vyhledávacího vzorku 0 nebo více.

Například:

najít. -name * .mp3

* .mp3 vrátí shodu pro libovolný název souboru, který končí v .mp3. Podobně bych mohl použít hvězdičku pomocí příkazu grep jako následující:

ps -ef | grep F * efox

Stojí za to poznamenat, že se to trochu liší, protože hvězdička znamená nulu nebo více, stejně jako nalezení firefoxu, facefoxu a fonefoxu také může najít flutefox, ferretfox a dokonce i jen fefox.

Karát jako metacharakter (^)

Karát (^) se používá k označení začátku řádku nebo řetězce. Tak jak se používá?

Příkaz ls slouží k zobrazení všech souborů v adresáři následujícím způsobem:

ls

Chcete-li znát všechny soubory ve složce, které začínají určitým řetězcem, například "gnome", pak karát lze použít k zadání řetězce.

Například:

ls | grep ^ gnome

Všimněte si, že se jedná pouze o soubory, které začínají s GNOME. Pokud chcete soubory, které mají název GNOME kdekoliv, pak byste se opět vrátili zpět k hvězdičce.

Ve výše uvedeném příkladu ls vrátí seznam názvů souborů a předá tento seznam znaku grep, který se používá pro přizpůsobení vzoru. grep ví, že karátový symbol znamená najít něco, co začíná znaky, které přijdou za ním a v tomto případě je to gnome.

Symbol dolaru jako metacharakter ($)

Symbol dolaru může mít více významů jako metacharakter v rámci systému Linux.

Když se používá pro porovnávání vzorků, znamená to opačný k karátu a označuje libovolný vzorec, který končí určitým řetězcem.

Například:

ls | grep png $

Zobrazí seznam všech souborů, které končí png.

Symbol dolaru se také používá pro přístup k proměnným prostředí v rámci bash shellu.

Například:

exportní pes = molly
echo $ pes

Linkový export pes = molly vytváří proměnnou prostředí nazývanou pes a nastavuje jeho hodnotu na molí. Pro přístup k proměnné prostředí je použit symbol $. S symbolem $ echo $ dog statement se zobrazuje molly, ale bez něj, ozvěnové výkazy psů zobrazují slovo dog.

Únikové metacharactery

Někdy nechcete, aby metacharakter měl zvláštní význam. Co když máte soubor nazvaný f.refox a soubor nazvaný firefox.

Nyní se podívejte na následující příkaz:

ls | grep f.refox

Co si myslíte, že je vrácena? Oba f.refox a firefox jsou vráceny, protože oba odpovídají vzoru.

Chcete-li vrátit pouze f.refox, musíte uniknout úplné zastávce, aby skutečně znamenalo úplnou zastavení následujícím způsobem:

ls | grep f \\. refox

Společné metacharactery a jejich významy

Seznam metacharacterů Linuxu
Charakter Význam
. Libovolná postava
* * * Nula nebo více znaků
^ Porovnejte libovolný řádek nebo řetězec, který začíná vzorem (tj. ^ Gnome)
$ Shodte libovolný řádek nebo řetězec končící vzorem (tj. Gnome $)
\ Vynechá další znak, aby odstranil svůj zvláštní význam
[] Shodte jeden ze seznamu nebo rozsahu (např. ["Abc", "def"] nebo [1..9]
+ Shodte jeden nebo více předchozích (tj. Grep a +)
? Odpovídá nula nebo jedna předcházející