Faceți căutări pe acest blog

vineri, 16 septembrie 2011

Metacaractere/ wildcards

 Metacaracterele sunt caractere ale tastaturii cu înțelesuri speciale pentru shell. Metacaracter este orice caracter al tastaturii care nu este alfanumeric (literă sau cifră) cu excepția punctului (.) și a liniei jos (_). Evident tastele speciale nu sunt luate în considerație (Enter, Tab, Spacebar, tastele săgeți, tastele funcționale, etc)... :D
 Este posibil să cunoașteți deja modul de utilizare al unor metacaractere din DOS sau o suită de Office, hai să vedem cum putem folosi practic metacaractere în linia de comandă, mai precis cum putem substitui un caracter sau o serie de caractere cu metacaractere, urmând ca shell-ul să schimbe în comanda dată metacaracterul cu simbolul/ simbolurile corecte sau să execute ce trebuie. Pe scurt câteva cuvinte despre unele din cele mai folosite metacaractere.

 1- Semnul întrebării (?)= înlocuiește orice caracter.
De exemplu vom căuta un screenshot numit screenshot:
[shogun@arch-stressat ~]$ ls screenshot?.png
screenshot1.png  screenshot2.png  screenshot3.png  screenshot4.png  screenshot5.png  screenshot6.png
Se poate observa că ? a înlocuit un caracter, respectiv 1, 2, 3, 4, 5 sau 6.

 2- Asteriscul (*)= înlocuiește orice și mai ales oricâte caractere.
Urmând același exemplu va fi suficient să dăm comanda:
[shogun@arch-stressat ~]$ ls scr*.png
screenshot1.png  screenshot3.png  screenshot5.png  screenshot.png
screenshot2.png  screenshot4.png  screenshot6.png

 Puteți observa că acum am găsit încă un fișier (screenshot.png), imagine care nu se încadra în prima căutare deoarece după screenshot nu mai este un alt caracter...
  Operațiile acestea se pot face în orice director, cu condiția să dăm calea corectă, și putem folosi 2 sau mai multe metacaractere:
[shogun@arch-stressat ~]$ ls Documents/?il*.png
Documents/wildcards1.png  Documents/wildcards2.png  Documents/wildcards3.png


3- Parantezele pătrate ([ ])= corespunde oricărui caracter singular aflat în interiorul acestor paranteze pătrate. Vom crea în directorul test câteva fișiere, să zicem car, cer, cor, cir și vom face o căutare:
[shogun@arch-stressat ~]$ ls test/c[ai]r
test/car  test/cir

 În directorul test avem de fapt mai multe fișiere:
[shogun@arch-stressat ~]$ ls test
car  cer  cir  cor

deci se poate observa cum funcționează...
 Se vede că s-au găsit două fișiere care corespund comenzii, respectiv fișiere cu numele format din trei caractere, primul c, ultimul r iar cel din mijloc a sau i, test/car și test/cir.
Deasemenea putem căuta astfel un șir, o serie de obiecte, să căutăm niște capturi de ecran numite "screenshot", dar numai unele din ele, vom folosi [a-z] pentru a găsi toate obiectele care se termină cu caracterele dintre a si z (orice litere sau cifre...) :
[shogun@arch-stressat ~]$ ls Documents/screenshot[1-5].png
Documents/screenshot1.png  Documents/screenshot3.png
Documents/screenshot2.png  Documents/screenshot4.png 

Documents/screenshot5.png
 Deasemenea putem combina mai multe metacaractere:
[shogun@arch-stressat ~]$ ls scr*[2-5].png
screenshot2.png  screenshot3.png  screenshot4.png  screenshot5.png


4- Semnul exclamației (!)= anulează, este inversul, reversul, nu este egal. De exemplu adăugând în comanda următoare caracterul ! comanda va șterge fișierele cu nume format din caractere care NU SUNT în paranteze:
[shogun@arch-stressat ~]$ rm test/c[!ae]* 
[shogun@arch-stressat ~]$ls test
car  cer

După cum vedeți celelalte fișiere au fost șterse.
Sau pentru a căuta fișiere care la fel sunt excluse datorită numelor:
[shogun@arch-stressat ~]$ ls s?r*[!3-5].png
screenshot1.png  screenshot2.png  screenshot6.png  screenshot.png



5- Punct și virgulă (;)= acest caracter este folosit pentru a ”lega” două sau mai multe comenzi independente:
[shogun@arch-stressat test]$ cd; pwd; ls -l
/home/shogun
total 6228
drwxr-xr-x  2 shogun root    4096 Sep 15 20:01 bin
drwxr-xr-x  2 shogun root    4096 Sep  4 13:01 Desktop
drwxr-xr-x  2 shogun root    4096 Sep 17 13:02 Documents
drwxr-xr-x  5 shogun root    4096 Sep 15 19:59 Downloads
drwxr-xr-x  3 shogun root    4096 Sep 15 19:52 Everest
drwxr-xr-x  6 shogun root    4096 Sep  3 10:27 fbterm-1.7
drwxr-xr-x  3 shogun root    4096 Sep 15 20:01 html
drwxr-xr-x  3 shogun root    4096 Sep 15 20:01 include
drwxr-xr-x  4 shogun root    4096 Sep 15 20:01 lib
drwx------  2 shogun root    4096 Sep 16 20:28 mail
drwxr-xr-x  5 shogun root   12288 Sep 11 18:31 Music
drwxr-xr-x 23 shogun root    4096 Sep 11 12:32 old-settings
drwxr-xr-x  2 shogun root    4096 Sep 15 20:01 pics
drwxr-xr-x  2 shogun root    4096 Sep 11 17:06 Pictures

Etc, outputul este prea lung.
Comanda anterioară va schimba directorul curent din test în ~ (cd), următoarea parte va afișa directorul (pwd) și-n fine ultima comandă va lista conținutul directorului (ls -l).


6- Pipeline (|)= este folosit pentru executarea a două sau mai multe comenzi, în așa fel încăt comanda următoare să se aplice asupra rezultatului primei comenzi:
[shogun@arch-stressat ~]$ cat .mplayer/config | grep subcp
subcp=latin2


7-  Pipeline dublat (||)= pentru executarea celei de-a doua comenzi doar dacă prima returnează eroare, nu se poate executa. De pildă crearea unui director doar dacă el nu există (cd test/11 || mkdir tmp/11):
[shogun@arch-stressat ~]$ cd test/11 || mkdir test/11
bash: cd: test/11: No such file or directory
[shogun@arch-stressat ~]$ cd test/11
[shogun@arch-stressat 11]$


8- &&= pentru executarea celei de-a doua comenzi doar dacă prima comandă s-a executat cu succes:
[shogun@arch-stressat 11]$ mkdir proba && cd proba
[shogun@arch-stressat proba]$


 Mai sunt multe de aflat despre metacaractere și utilizarea lor, dar aceasta rămâne în sarcina fiecăruia dintre doritori.

6 comentarii:

  1. Educativ... eu folosesc * && ; tab - atat... :)
    Poate gasesti ceva nou aici: http://www.debian.org/doc/manuals/debian-reference/ch01.en.html#_customization_of_mc

    RăspundețiȘtergere
  2. Nu văd legătura între wildcards și mc.
    Sau te referi cumva la vreun material nou despre mc? Adică dacă tot am scris despre tot felul de "Swiss army knife" în Linux (ffmeg, mplayer, vlc)???

    RăspundețiȘtergere
  3. Mai jos in acea pagina sunt si metacaractere: [...] [^...]
    Mi-ar placea sa citesc si despre MC, stiu ca ai mai scris despre el :)
    Multumesc.

    RăspundețiȘtergere
  4. Sau pentru a nu cauta pe net exista un manual
    [b]man 7 glob[/b]

    RăspundețiȘtergere
  5. Poate mai târziu. Sincer să fiu, am deja începute alte 2 materiale, plus încă unul în cap, și pe ăsta cred că-l voi scrie primul. Mulțumesc oricum pentru feedback!

    RăspundețiȘtergere
  6. Salut, mă înteresează să redenumesc 2,3 fișiere (filmhd.mkv, filmhd.srt) în film.mkv respectiv film.srt

    Eu folosesc mv filmhd.mkv film.mkv; mv filmhd.srt film.srt

    Mă interesează dacă pot să dau doar o comandă, ceva de genul: mv filmhd.mkv filmhd.srt film.*

    Ms

    RăspundețiȘtergere

Back to top