Čo sú metacharactery Linuxu a ako ich používate?

Podľa Wikipédie je metacharakter akýkoľvek znak, ktorý má špeciálny význam, napríklad karát (^), znak dolára ($) alebo hviezdičku (*).

Pokiaľ ide o Linux, existuje veľký počet týchto metaznačiek a ich významy sa líšia v závislosti od toho, ktorý príkaz alebo program používate.

Full Stop ako metacharakter (.)

Skromná plná zastávka sa používa na darovanie aktuálnej pozície pri spustení príkazov ako cd , find alebo sh, ale v aplikáciách ako awk , grep a sed sa používa na označenie ľubovoľného znaku.

Napríklad nasledujúci príkaz nájde všetky súbory mp3 v aktuálnom priečinku a nižšie.

Nájsť . -name * .mp3

Ak spustíte daný príkaz vo svojom pracovnom adresári (pwd), pravdepodobne budete mať vrátené výsledky za predpokladu, že budete mať svoje súbory mp3 v hudobnom priečinku vo vašom domovskom priečinku.

Pozrite sa na tento príkaz:

ps -ef | grep f..efox

Príkaz ps uvádza všetky spustené procesy v počítači. Príkaz grep preberá riadky vstupu a vyhľadáva vzor.

Preto príkaz ps -ef dostane zoznam bežiacich procesov a dáva ho na grep, ktorý hľadá ľubovoľný riadok v zozname, ktorý má f..efox kde. môže znamenať ľubovoľný znak.

Ak máte spustený firefox, dostanete zápas. Podobne, ak máte program nazvaný fonefox alebo freefox beží, budú tiež vrátené.

Hviezdička ako metacharakter (*)

Hviezdička je všeobecne známy metacharakter a používa sa pri hľadaní vzoru na označenie 0 alebo viac.

Napríklad:

Nájsť . -name * .mp3

* .mp3 vracia zhodu pre ľubovoľný názov súboru, ktorý končí v .mp3. Podobne by som mohol použiť hviezdičku pomocou príkazu grep ako nasledujúci:

ps -ef | grep F * efox

Stojí za zmienku, že sa to trochu líši, pretože hviezda znamená nulu alebo viac, rovnako ako nájsť firefox, facefox a fonefox to tiež môže nájsť flutefox, ferretfox a dokonca len fefox.

Karát ako metacharakter (^)

Karát (^) sa používa na označenie začiatku čiary alebo reťazca. Tak ako sa používa?

Príkaz ls slúži na zoznam všetkých súborov v priečinku takto:

ls

Ak chcete vedieť všetky súbory v priečinku, ktoré začínajú určitým reťazcom, ako napríklad "gnome", karát sa dá použiť na zadanie reťazca.

Napríklad:

ls | grep ^ gnome

Upozorňujeme, že sú uvedené len súbory, ktoré začínajú s GNOME. Ak chcete mať súbory, ktoré majú názov GNOME kdekoľvek, potom by ste sa vrátili späť k hviezdičke.

Vo vyššie uvedenom príklade ls vráti zoznam názvov súborov a prechádza tento zoznam na grep, ktorý sa používa na prispôsobenie vzorov. grep vie, že karátový symbol znamená nájsť čokoľvek, čo začína znakmi, ktoré po ňom prídu a v tomto prípade je to gnome.

Symbol dolára ako metacharakter ($)

Symbol dolára môže mať viac významov ako metacharakter v systéme Linux.

Keď sa používa na porovnávanie vzorov, znamená to opačný k karátom a označuje akýkoľvek vzor, ​​ktorý končí určitým reťazcom.

Napríklad:

ls | grep png $

Tento zoznam obsahuje zoznam všetkých súborov, ktoré končí png.

Symbol dolára sa používa aj na prístup k premenným prostredia v rámci bash shell.

Napríklad:

export pes = molly
echo $ pes

Linkový export pes = molly vytvára premennú prostredia nazývanú pes a nastaví jeho hodnotu na molil. Na prístup k premennej prostredia sa používa symbol $. So symbolom $ označí výstražný znak "dog dog" molický, ale bez toho, hlásenie ozveny psov len zobrazuje slovo pes.

Únikové metacharactery

Niekedy nechcete, aby metacharakter mal zvláštny význam. Čo ak máte súbor s názvom f.refox a súbor s názvom firefox.

Pozrite sa na nasledujúci príkaz:

ls | grep f.refox

Čo si myslíte, že sa vráti? Obaja f.refox a firefox sú vrátené, pretože obe zodpovedajú vzoru.

Ak chcete iba vrátiť f.refox, musíte uniknúť úplnej zastave, aby ste skutočne znamenali úplnú zastávku takto:

ls | grep f \\. refox

Spoločné meta-karantény a ich významy

Zoznam metacharacterov Linuxu
znak zmysel
, Každý znak
* Nula alebo viac znakov
^ Zhodte ľubovoľný riadok alebo reťazec, ktorý začína vzorom (tj ^ gnome)
$ Zodpovedajúci ľubovoľný riadok alebo reťazec končiaci vzorom (tj gnome $)
\ Vynechá ďalší znak, aby odstránil svoj špeciálny význam
[] Zhoda jedného zo zoznamu alebo rozsahu (tj ["abc", "def"] alebo [1..9]
+ Zhoda jednej alebo viacerých predchádzajúcich (tj grep a +)
? Zhoda nula alebo jedna predchádza