Está en la página 1de 5

Caracteres 

genéricos
Los caracteres genéricos son caracteres especiales dedicados a la escritura de motivos en los nombres de archivo. 

Permiten efectuar una búsqueda según un motivo por los nombres de archivo presentes en el directorio actual. 

Los ejemplos de esta sección se basan en un directorio con los archivos siguientes:  

[javier]$ ls -a
. banco azul arch1 arch2.4 .os rosado
.. blanco ejemplos arch2 arch2.7 redonda rojo

El asterisco: * 

Cuando  el  Bash  encuentra  este  carácter  en  la  línea  de  comandos,  lo  sustituye  por  una  cadena  de  caracteres  (que 
puede ser de longitud nula) para enumerar todos los nombres de archivo que corresponden al motivo en el directorio 
actual. 

Así, el motivo r*o se reemplaza por todos los nombres de archivo que empiezan por el carácter  r y terminan con el 
carácter o: 

[javier]$ ls r*o
rosado rojo

El  signo  *  reemplaza  cualquier  carácter  en  el  motivo,  excepto  el  .  (punto)  en  primera  posición  en  el  nombre  de 
archivo; por ejemplo, el motivo *s corresponde al archivo ejemplos, pero no al archivo .os: 

[javier]$ ls *s
ejemplos

La exclusión del primer punto por el carácter genérico  * evita la supresión de archivos ocultos con el comando rm *; 


el objetivo de los nombres de archivo que empiezan por un punto es precisamente ocultar los archivos de los que uno 
no se quiere preocupar (pero sin suprimirlos). 

Un motivo puede estar compuesto por varios caracteres genéricos; repitiendo el asterisco, se obtiene, por ejemplo, 
*e* que concuerda con todos los archivos con al menos una e en su nombre: 

[javier]$ ls *e*
ejemplos redonda

Finalmente,  si  el  shell  no  encuentra  correspondencias  con  el  motivo  entre  los  nombres  de  archivo  presentes  en  el 
directorio actual, dicho motivo se transmite tal cual al comando: 

[javier]$ ls *zork
ls: *zork: No such file or directory

© Éditions ENI – Todos los derechos reservados – Copia personal de Luis Montalvan - 1-
En este último ejemplo, ningún nombre de archivo se corresponde con el motivo *zork; el comando ls recibe el motivo 
como argumento y lo devuelve en su mensaje de error. 

Esta observación es válida también para los caracteres genéricos siguientes. 

El signo de interrogación: ? 

Como el signo  *, el shell sustituye el carácter genérico ? por cualquier carácter, excepto el punto, al principio de un 
nombre de archivo. A diferencia del asterisco, el signo de interrogación se reemplaza por un carácter (y sólo uno), y 
no por una cadena de cualquier longitud. 

Así, el motivo ro?o corresponde a todos los nombres de archivo de exactamente cuatro caracteres que empiezan por 
ro y terminan por o: 

[javier]$ ls ro?o
rojo

De nuevo, este carácter genérico puede combinarse con otros en el mismo motivo: 

?a?  Nombre de archivo de tres letras con una a en segunda posición. 

*a?  Nombre de archivo que presenta una a en penúltima posición. 

??a*b?  Nombre de archivo que presenta una a en tercera posición y una b en penúltima posición. 

Los corchetes: [ ] 

La sintaxis [lista_de_caracteres] en un motivo representa un carácter (y sólo uno) entre los propuestos en la lista. 
Por ejemplo, [abc] se reemplaza por una a, una b o una c. 

Todo carácter situado entre los corchetes forma parte de la lista de posibles caracteres; no hay, pues, espacios entre 
los corchetes, a menos que el espacio sea un carácter posible de la lista. 

Para listar todos los archivos cuyo nombre contiene una o o una l en segunda posición, se usa el motivo ?[ol]*: 

[javier]$ ls ?[ol]*
rosado rojo blanco

Es posible simplificar listas de caracteres consecutivos (según el orden de la tabla ASCII) separando el primero y el 
último carácter de la lista con un ­ (guión). La sintaxis [b-e] equivale a [bcde]: 

[javier]$ ls [b-e]*
banco blanco ejemplos

- 2- © Éditions ENI – Todos los derechos reservados – Copia personal de Luis Montalvan
Para especificar el carácter ­ como elemento de la lista, se inserta al principio o al fin de la lista:  [ab-] corresponde a 
a, a b o a -. 

Al ser las minúsculas y las mayúsculas distintas en Linux, para representar todas las letras posibles del alfabeto en 
un nombre de archivo, se usa la sintaxis [a-zA-Z]. 

Si el primer carácter de la lista es un signo de exclamación ! o un acento circunflejo ˆ, la correspondencia se hace con 
cualquier carácter que no esté en la lista; para listar todos los archivos cuyo nombre no empiece por a, ni par un r: 

[javier]$ ls [!ar]*
banco blanco ejemplos
[javier]$ ls [ˆar]*
banco blanco ejemplos

Para especificar el carácter  ! o  ˆ como elemento de la lista, se inserta en cualquier lugar de la lista salvo al principio: 


[a!b] corresponde a a, a ! o a b. 

Finalmente,  existen  ciertas  clases  de  caracteres  predefinidas.  Sus  nombres  son  bastante  explícitos:  [:alpha:], 
[:digit:], ... por ejemplo, [[:alnum:]] corresponde a [0-9A-Za-z], con la diferencia de que el último caso depende 
de la codificación ASCII, mientras que el primero incluye todas las letras del idioma configurado en el sistema. 

Por  ejemplo,  los  caracteres  acentuados  forman  parte  de  la  clase  [:alnum:]  en  español,  pero  no  en  lenguaje 
internacional C ANSI: 

[javier]$ ls
espacio satélite
[javier]$ echo $LANG
sp_SP
[javier]$ ls [[:alnum:]]*
espacio satélite
[javier]$ LANG=C
[javier]$ ls [[:alnum:]]*
espacio

Los  corchetes  en  los  nombres  de  clases  forman  parte  integral  del  nombre  simbólico;  deben  añadirse,  pues,  a  los 
corchetes que enmarcan la lista. 

Las principales clases son: 

[:alnum:] 

Corresponde a los caracteres alfabéticos y numéricos. Equivale a [A-Za-z0-9]. 

[:alpha:] 

Corresponde a los caracteres alfabéticos. Equivale a [A-Za-z]. 

[:digit:] 

© Éditions ENI – Todos los derechos reservados – Copia personal de Luis Montalvan - 3-
Corresponde a las cifras (decimales). Equivale a [0-9]. 

[:graph:] 

(caracteres gráficos visibles). Corresponde a los caracteres comprendidos entre ASCII 33 y ASCII 126. 
Es idéntico a [:print:], presentado anteriormente, pero excluye el carácter espacio. 

[:lower:] 

Corresponde a los caracteres alfabéticos en minúscula. Equivale a [a-z]. 

[:print:] 

(caracteres imprimibles). Corresponde a los caracteres comprendidos entre ASCII 32 y ASCII 126. 
Equivale a [:graph:], presentado anteriormente, pero se añade el carácter espacio. 

[:space:] 

Corresponde a cualquier espacio en blanco (espacio y tabulación horizontal). 

[:upper:] 

Corresponde a cualquier carácter alfabético en mayúsculas. Equivale a [A-Z]. 

[:xdigit:] 

Corresponde a las cifras hexadecimales. Equivale a [0-9A-Fa-f]. 

Para todos los nombres de archivo cuyo último carácter es una cifra, se obtiene:  

[javier]$ ls *[[:digit:]]
arch1 arch2 arch2.4 arch2.7

Las llaves: {} 

A  la  manera  de  los  corchetes  que  ya  hemos  visto  para  la  creación  de  listas  de  caracteres,  las  llaves  permiten 
especificar listas de motivos separadas por una coma en un motivo de reemplazo. La sintaxis {abc,def} se reemplaza 
por la cadena abc o la cadena def. 

Por ejemplo, {az,ro}* corresponde a todos los nombres de archivo que empiezan por la cadena az o la cadena ro: 

[javier]$ ls {az,ro}*
azul rosado rojo

Las  cadenas  de  caracteres  presentes  entre  llaves  pueden  ser,  a  su  vez,  motivos  compuestos  de  caracteres 
genéricos: 

[javier]$ ls {*ro[sj]*,?a*}

- 4- © Éditions ENI – Todos los derechos reservados – Copia personal de Luis Montalvan
banco rosado rojo

Operadores de correspondencia extendida 

Si  la  opción  extglob  del  shell  se  ha  activado  con  el  comando  shopt,  se  reconocen  varios  operadores  de 
correspondencia  extendida.  En  la  descripción  siguiente, una  "lista_motivo"  es  una  lista  de  uno  o  más  motivos 
separados por |. Los motivos compuestos se indican entre paréntesis y van precedidos por un operador que define el 
número de instancias: 

?(lista_motivo) 

Corresponde a cero o una instancia de los motivos indicados. 

*(lista_motivo) 

Corresponde a cero o más instancias de los motivos indicados. 

+(lista_motivo) 

Corresponde a una o más instancias de los motivos indicados. 

@(lista_motivo) 

Corresponde a exactamente una instancia de los motivos indicados. 

!(lista_motivo) 

Corresponde a todo salvo a los motivos indicados. 

Por ejemplo, +([[:digit:]])* corresponde a todos los archivos cuyo nombre empieza por al menos una cifra. 

© Éditions ENI – Todos los derechos reservados – Copia personal de Luis Montalvan - 5-

También podría gustarte