Probablemente Usted ya usa
caracteres de englobamiento sin saberlo.
Cuando Usted especifica un archivo en Windows® o cuando busca un
archivo, Usted usa *
para hacer coincidir con una
cadena arbitraria de caracteres. Por ejemplo,
*.txt
hace coincidir a todos los archivos cuyo
nombre termina con .txt
. Nosotros también los
usamos mucho en la última sección. Pero el englobamiento va más allá
que el simple *
.
Cuando Usted ingresa un
comando como ls *.txt y presiona
Intro, la tarea de encontrar cuales archivos se
corresponden con el patrón *.txt
no la realiza
el comando ls, sino el shell en sí mismo. Esto requiere de
una pequeña explicación sobre como interpreta el shell la línea de
comandos. Cuando Usted ingresa:
$ ls *.txt leerme.txt recetas.txt
primero la línea de comandos se separa en
palabras (ls
y *.txt
, en este
ejemplo). Cuando el shell ve un *
en una
palabra, interpretará toda la palabra como un patrón de
englobamiento y la reemplazará con los nombres de todos los
archivos que se correspondan con el patrón. Por lo tanto, justo
antes que el shell la ejecute, la línea se convirtió en la línea
ls leerme.txt recetas.txt, lo que da el
resultado esperado. El shell reacciona así frente a otros
caracteres como:
?
se corresponde con un
único caracter (uno y sólo uno), cualquiera que sea este;
[...]
se corresponde con cualquiera de los caracteres que se encuentran
entre los corchetes; los caracteres pueden estar referidos por
intervalos (por ejemplo, 1-9
) o por valores
discretos,o una mezcla de ambos. Ejemplo:
[a-zBE5-7]
se corresponderá con todos los
caracteres desde la a
hasta la
z
, una B
, una
E
, un 5
, un
6
o un 7
;
[!...]
: se corresponde con cualquier caracter
que no se encuentre en los corchetes.
[!a-z]
, por ejemplo, se corresponderá con
cualquier caracter que no sea una letra minúscula[16];
{c1,c2}
se
corresponde con c1
o con
c2
, donde c1
y
c2
también son patrones de englobamiento, lo
cual significa que Usted puede escribir
{[0-9]*,[acr]}
por ejemplo.
Aquí tiene algunos patrones y su significado:
/etc/*conf
: todos los
archivos del directorio /etc
cuyo nombre
termine con conf
. Se puede corresponder con
/etc/inetd.conf
, pero también con
/etc/conf.linuxconf
y también con
/etc/conf
si existe tal archivo: recuerde
que *
puede corresponderse con una cadena
vacía.
imagen/{autos,espacio[0-9]}/*.jpg
:
todos los archivos cuyo nombre termina en
.jpg
en los directorios
imagen/autos
,
imagen/espacio0
, ... ,
imagen/espacio9
, si es que dichos
directorios existen.
/usr/share/doc/*/LEAME
:
todos los archivos denominados LEAME
en
todos los subdirectorios inmediatos del directorio
/usr/share/doc
. Esto hará que
/usr/share/doc/mandriva/LEAME
corresponda
por ejemplo, pero no
/usr/share/doc/miprog/doc/LEAME
.
*[!a-z]
Todos los
archivos en el directorio corriente cuyo nombre
no termine con una letra minúscula.
[16] ¡Cuidado! Aunque esto es cierto
para la mayoría de los idiomas, puede no ser cierto bajo su
propia configuración de idioma (locale
). Esta
característica depende del orden de comparación
(collating order). En algunos
sistemas, [a-z]
se corresponderá con a, A, b,
B, (...) , z. Y ni siquiera mencionamos el hecho que algunos
idiomas tienen caracteres acentuados.