Linux-Mandrake: Manual de Referencia | ||
---|---|---|
Anterior | Capítulo 3. Introducción a la línea de comandos | Siguiente |
Probablemente Ud. ya usa caracteres de englobamiento sin saberlo. Cuando Ud. especifica un archivo en Windows o cuando Ud. busca un archivo, Ud. usa * para hacer coincidir con una cadena aleatoria 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 Ud. 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 Ud. 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 a cualquier caracter que no se encuentre entre los corchetes. [!a-z], por ejemplo, se corresponderá con cualquier caracter que no sea una letra minúscula[1];
{c1,c2} se corresponde con c1 o con c2, donde c1 y c2 también son patrones de englobamiento, lo cual significa que Ud. 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.
image/autos,espacio[0-9]/*.jpg: todos los archivos cuyo nombre termina en .jpg en los directorios image/autos, image/espacio0, ... , image/espacio9, si es que dichos directorios existen.
/usr/doc/*/LEAME: todos los archivos denominados LEAME en todos los sub-directorios inmediatos del directorio /usr/doc. Esto hará que /usr/share/doc/mandrake/LEAME corresponda, 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.
[1] | ¡Cuidado! Aunque esto es cierto bajo GNU/Linux, puede que no lo sea bajo otros sistemas operativos tipo Unix. Esta característica depende del orden de comparación. 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... |