lunes, 23 de abril de 2012

Comodines (Metacaracteres) en la Shell

A continuación se detallan ciertos comodines útiles al momento de listar archivos o directorios:


* Sustituye todos los caracteres a partir del comodin
? Sustituye un solo caracter en la posicion del comodin
[ ] Sustituye un solo caracter de la lista especificada
[! ] Niega la condicion colocada dentro de los [ ]
{ } Sustituye string o cadenas dentro de las llaves.


Ejemplos:

Asterisco *

- Lista los archivo o directorios que comiencen con “a”
johnny@debianJG:~/Documents/pruebas/abecedario$ ls a*
a

- Lista los archivo o directorios que contengan al menos una “a”
johnny@debianJG:~/Documents/pruebas/abecedario$ ls *a*
a caballo casa elefante finca hermana hermano mansion silla tortuga yegua


Interrogacion ?

- Lista los archivos o directorio donde el segundo caracter sea cualquier letra.
johnny@debianJG:~/Documents/pruebas/abecedario$ ls h?r*
hermana hermano


Corchetes [ ]

- Lista los archivos o directorio que tengan una sola letra y este entre la “a” y “d”. Si no tenemos la variable de ambiente LC_COLLATE activada con valor “C” el resultado no discriminara entre Mayuscula y Minuscula.
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [a-d]
a A b B c C d

- Lista archivos o directorios donde las primeras letras esten entre “a” y “d” sin discriminar entre Mayuscula y minuscula.
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [a-d]*
a A b B c C caballo casa d


Si queremos que al listar, en el resultado nos diferencie entre Mayuscula y Minuscal debemos realzar lo siguiente. Ver manual del grep, en parte del manual nos dice los siguiente:

...
Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single character that sorts between the two characters, inclusive, using the locale's collating sequence and character set. For example, in the default C locale, [a-d] is equivalent to [abcd]. Many locales sort characters in dictionary order, and in these locales [a-d] is typically not equivalent to [abcd]; it might be equivalent to [aBbCcDd], for example. To obtain the traditional interpretation of bracket expressions, you can use the C locale by setting the LC_ALL environment variable to the value C.
...
LC_ALL, LC_COLLATE, LANG
These variables specify the locale for the LC_COLLATE category, which determines the collating sequence used to interpret range expressions like [a-z].

"Ver man del comando locale para mayor información"

Primero comprobamos que la variable LC_COLLATE no este definida:

johnny@debianJG:~/Documents/pruebas/abecedario$set | grep LC_COLLATE
johnny@debianJG:~/Documents/pruebas/abecedario$env | grep LC_COLLATE


"Set sirve para ver todas las variables locales y exportadas, Env sirve para ver solo las variables exportadas. Como no se muestra la variable LC_COLLATE, procedemos a definirla y exportala de la siguiente forma:"


johnny@debianJG:~/Documents/pruebas/abecedario$ LC_COLLATE=C
johnny@debianJG:~/Documents/pruebas/abecedario$set | grep LC_COLLATE
LC_COLLATE=C
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [a-d]
a b c d
johnny@debianJG:~/Documents/pruebas/abecedario$env | grep LC_COLLATE
johnny@debianJG:~/Documents/pruebas/abecedario$export LC_COLLATE
johnny@debianJG:~/Documents/pruebas/abecedario$env | grep LC_COLLATE
LC_COLLATE=C
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [a-d]
a b c d
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [A-Z]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z


Negando Corchete [! ]

- Lista los archivos o directorios de una letra que no se una vocal
johnny@debianJG:~/Documents/pruebas/abecedario$ ls [!a,e,i,u,o,A,E,I,O,U]
B C D F G H J K L M N P Q R S T V W X Y Z b c d f g h j k l m n p q r s t v w x y z


Llaves { }

- Lista los archivo o directorios que contenga el string o cadena “lo”, “an”
johnny@debianJG:~/Documents/pruebas/abecedario$ ls *{lo,an}*
caballo elefante hermana hermano hilo mansion

Esto es similar a realizar el listado de la siguiente forma:

johnny@debianJG:~/Documents/pruebas/abecedario$ ls *lo* *an*
caballo elefante hermana hermano hilo mansion

2 comentarios: