El Racó de Xavi

Reflexions i altres coses

Algú va dir...

L'autèntic perdedor no és aquell que no guanya. L'autèntic perdedor és aquell que té tanta por a no guanyar que ni tan sols ho intenta.
Alan Arkin

Entrades recents


Categories


Núvol d'etiquetes


Arxius del bloc


Blocs que m'agraden


Publicitat

Acabe d'escoltar...

Planeta Softcatalà

“Parameter substitution” en BASH…

... no haver-ho conegut abans!

29 d'octubre de 2009 @ 19:31
Aquesta és una entrada molt específica de programació

No fa molt vaig descobrir la substitució de paràmetres en bash, i la veritat és que és una eina increïble que evita usos de sed, awk, o cut quan realment no fa falta.

A continuació reproduïsc una llista que he trobat a “BASH Cures Cancer“, un blog que pretén explicar les bondats del BASH per als Linuxers.

  1. Les variables es poden especificar de dues formes: $var o ${var}.
    $ var='a.ads,fssd2342%asd234#@.,&%,sdfgsdfgas4352'
    $ echo ${var}
    a.ads,fssd2342%asd234#@.,&%,sdfgsdfgas4352
  2. ${#var} és la llargària de la variable.
    $ echo ${#var}
    42
  3. ${var:pos} genera una subcadena començant en la posició pos.
    $ echo ${var:10}
    2342%asd234#@.,&%,sdfgsdfgas4352
  4. ${var:pos:len} genera una subcadena començant a en la posició pos d’una llargària len.
    $ echo ${var:10:5}
    2342%
  5. ${var#pattern} esborra el patró pattern començant pel principi de la variable. Aquesta versió para només troba l’expressió regular. ${var##pattern} és la versió extesa.
    $ echo ${var#*,}
    fssd2342%asd234#@.,&%,sdfgsdfgas4352
    $ echo ${var##*,}
    sdfgsdfgas4352
  6. ${var%pattern} elimina el patró pattern començant pel final de la variable. Aquesta versió para només troba l’expressió regular. ${var%%pattern} és la versió extesa.
    $ echo ${var%,*}
    a.ads,fssd2342%asd234#@.,&%
    $ echo ${var%%,*}
    a.ads
  7. ${var/pattern/replacement} substitueix l’expressió regular pattern amb replacement una vegada.
    $ echo ${var/a/A}
    A.ads,fssd2342%asd234#@.,&%,sdfgsdfgas4352
  8. ${var//pattern/replacement} substitueix l’expressió regular pattern amb replacement de manera global.
    $ echo ${var//a/A}
    A.Ads,fssd2342%Asd234#@.,&%,sdfgsdfgAs4352
  9. ${var/#pattern/replacement} si l’inici de la variable és com el patró pattern, es substitueix per replacement.
    $ echo ${var/#a./llll}
    llllads,fssd2342%asd234#@.,&%,sdfgsdfgas4352
  10. ${var/%pattern/replacement} si el final de la variable és com el patró pattern, es substitueix per replacement.
    $ echo ${var/%352/llll}
    a.ads,fssd2342%asd234#@.,&%,sdfgsdfgas4llll

Segur que aquells que utilitzeu el shell habitualment i no coneixieu açò, li podeu traure molt de profit.

Publicat per Xavi Ivars a Linux, Programació |

3 comentaris

  •  
  • Doncs a mi em vindrà de puta mare en la beca. Ara estic tocant molt de script en bash (i Python perquè hi han coses que no sé fer-les en AWK :P ).

    PS: Per cert, no sé si hauràs llegit el blog, però estic en el grup de Reconeixement de Formes i Tecnologia del Llenguatge Humà que investiga en reconeixement de text manuscrit, reconeixement de la parla, visió per computador, etc… No estaves fent el doctorat en alguna cosa d’aquestes? (Me’n recorde que comentaves els processos Markovians l’any passat).

  • Estic escrivint uns scripts per a un servidor svn i alguna d’aquestes substitucions m’estalviaran un bon grapat de línies de codi. Gràcies!

  • A mi la veritat és que també m’ha aprofitat per a alleugerir (i molt) alguns scripts.

    M’alegre que vos haja servit!

Digues la teua!









Atenció!
La moderació de comentaris està habilitada, i pot endarrerir la publicació del comentari.
No cal que l'envies més d'una vegada ;).


Sindica 'El racó de Xavi'! llicència de Creative Commons Reconeixement - Compartir-Igual

Pàgina gestionada amb Wordpress | Tema inspirat en OrangeDesign| Allotjament a Dreamhost