Ce sunt Metacharactele Linux și cum le folosiți

Potrivit Wikipedia, un metacaracter este orice personaj care are un înțeles special, cum ar fi o carate (^), semnul dolarului ($) sau un asterisc (*).

În ceea ce privește Linux, există un număr corect de metacaractere și semnificațiile lor diferă în funcție de comanda sau programul pe care îl executați.

Stopul complet ca un metacaracter (.)

Oprirea completă umilă este folosită pentru a dona poziția curentă atunci când rulează comenzi cum ar fi cd , find sau sh, dar în aplicații cum ar fi awk , grep și sed este folosit pentru a denota orice caracter.

De exemplu, următoarea comandă va găsi toate fișierele mp3 din dosarul curent și de mai jos.

găsi . -name * .mp3

Dacă rulați comanda respectivă în directorul de lucru (pwd), atunci probabil veți obține rezultate returnate, presupunând că păstrați fișierele mp3 într-un folder de muzică din dosarul dvs. de acasă.

Acum, uita-te la această comandă:

ps -ef | grep f..efox

Comanda ps enumeră toate procesele care rulează pe computer. Comanda grep ia linii de intrare și caută un model.

Prin urmare, comanda ps -ef primește o listă de procese în execuție și o dă grepului care caută orice linie din lista care are f..efox unde. poate însemna orice caracter.

Dacă aveți firefox rulează, veți obține un meci. În mod similar, dacă aveți un program numit fonefox sau freefox, acestea vor fi returnate.

Asteriscul ca metacaracter (*)

Asteriscul este un metacaracter universal mai bine cunoscut și este folosit pentru a însemna 0 sau mai mult la căutarea unui model.

De exemplu:

găsi . -name * .mp3

* .mp3 returnează o potrivire pentru orice nume de fișier care se termină în .mp3. În mod similar, aș fi putut folosi asteriscul cu comanda grep ca următoarele:

ps -ef | grep F * efox

Este demn de remarcat faptul că acest lucru diferă ușor deoarece asteriscul înseamnă zero sau mai mult, astfel încât să găsească firefox, facefox și fonefox se poate găsi, de asemenea, flutefox, ferretfox și chiar doar fefox.

Caratul ca un metacaracter (^)

Caratul (^) este folosit pentru a indica începerea unei linii sau a unui șir. Deci, cum este folosit?

Comanda ls este utilizată pentru a lista toate fișierele dintr-un dosar după cum urmează:

ls

Dacă doriți să cunoașteți toate fișierele dintr-un folder care începe cu un anumit șir, cum ar fi "gnome", atunci carate-ul poate fi folosit pentru a specifica acel șir.

De exemplu:

ls | grep ^ gnome

Rețineți că aceasta afișează numai fișiere care încep cu gnome. Dacă doriți fișiere care au un gnome în numele fișierului oriunde, atunci vă reveniți din nou la asterisc.

În exemplul de mai sus, ls returnează o listă de nume de fișiere și trece această listă în grep care este utilizat pentru potrivirea tiparelor. grep știe că simbolul caratei înseamnă să găsești ceva care începe cu personajele care vin după el și în acest caz este un gnome.

Simbolul dolarului ca metacaracter ($)

Simbolul dolarului poate avea mai multe semnificații ca un metacaracter în Linux.

Atunci când se utilizează pentru a potrivi modele, înseamnă opusul carate și denotă orice model care se termină cu un anumit șir.

De exemplu:

ls | grep png $

Aceasta afișează toate fișierele care se termină cu png.

Simbolul dolarului este, de asemenea, utilizat pentru a accesa variabilele de mediu din shell-ul bash.

De exemplu:

câine de export = molly
echo $ câine

Câinele de export de linie = molly creează o variabilă de mediu numită câine și își stabilește valoarea molilor. Pentru a accesa variabila de mediu, se folosește simbolul $. Cu simbolul $, declarația de câine ecou afișează molii, dar fără ea, afirmația de câine ecou afișează doar cuvântul câine.

Escaping Metacharacters

Uneori nu doriți ca metacaracterul să aibă un înțeles special. Ce se întâmplă dacă aveți un fișier numit f.refox și un fișier numit firefox.

Acum, uita-te la următoarea comandă:

ls | grep f.refox

Ce credeți că este returnat? Atât versiunile f.refox cât și firefox sunt returnate deoarece ambele corespund modelului.

Pentru a reveni doar la f.refox va trebui să scapi de oprirea completă pentru a însemna de fapt o oprire completă după cum urmează:

ls | grep f \\. refox

Common Metacharacters și semnificația lor

Lista metacaracterelor Linux
Caracter Sens
. Orice personaj
* Zero sau mai multe caractere
^ Se potrivește cu orice linie sau șir care începe cu un model (adică ^ gnome)
$ Pot potrivi orice linie sau șir care se termină cu un model (adică gnome $)
\ Evadează personajul următor pentru a elimina sensul său special
[] Se potrivește unul dintre o listă sau o gamă (adică ["abc", "def"] sau [1..9]
+ Se potrivește cu una sau mai multe precedente (adică grep a +)
? Se potrivește cu zero sau cu una precedentă