5 de mayo de 2011

Caracteres Comodín y Expresiones Regulares para Linux

Una característica importante de la mayoría de los intérpretes de comandos en Unix es la capacidad para referirse a más de un archivo usando expresiones regulares.

Linux usa los comodines para la sustitución de caracteres o secuencia de caracteres. Estos caracteres comodín nos puede ser de mucha utilidad cuando lanzamos el comando de para buscar un archivo, o varios archivos o directorios cuyo nombre contiene una determinada secuencia de caracteres.

Comandos y comodines en Linux
Caracteres comodín y expresiones regulares para Linux

El comodín “*”: Sustituye una cadena de caracteres del nombre del archivo o directorio. Cuando se usa el carácter “*” para referirse al nombre de un archivo o directorio, el intérprete de comandos lo sustituye por todas las combinaciones posibles de caracteres del nombre de los archivos y directorios dentro del directorio, que nos estamos refiriendo.

Por ejemplo, supongamos que en el directorio del usuario aceitunero tenemos varios directorios, como puede ser aceitunero, antonio y invitado.

Si observamos todos estos directorios termina en “o”, si lanzamos el comando ls nos mostrará todos los archivos y directorios que tenemos:

aceitunero@Pc15:~$ ls

aceitunero Documentos Imágenes Plantillas Videos
antonio Escritorio invitado Público
Descargas examples.desktop Música salida.txt

Pero si queremos listar todos los archivos que termina con la letra “o”, usaremos en esta línea de comandos el comodín "*", y el resultado sería:

aceitunero@Pc15:~$ ls *o

aceitunero:
antonio:
Escritorio:
Imagenes_ISO introduccion_linux_2010
invitado:
Público:

Como podemos ver, el comodín “*” ha sustituido todos los caracteres anteriores al carácter, que se ha introducido y ha realizado las combinaciones posibles de caracteres para mostrar los todos los archivos y directorios que terminen con la letra “o” del directorio, donde nos encontramos. Otros ejemplos sería:

aceitunero@Pc15:~$ ls a*

aceitunero:
total 0
antonio:
total 0

El comodín “?”: Este carácter comodín sólo sustituye solo un carácter, por ejemplo:

aceitunero@Pc15:~$ ls -ld antoni?

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio

aceitunero@Pc15:~$ ls -ld ?*o

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público

Los caracteres comodín nos permiten referirse a más de un archivo a la vez.

También podemos usarlos en combinación con otros comandos, por ejemplo con el comando cp o el comando mv, para copiar o mover varios archivos de una vez. Por ejemplo:

aceitunero@Pc15:~$ mkdir archivos_host

aceitunero@Pc15:~$ cp /etc/host* /home/aceitunero/archivos_host/

aceitunero@Pc15:~$ cd archivos_host/

aceitunero@Pc15:~/ archivos_host$ ls

host.conf hostname hosts hosts.allow hosts.deny

Lo que estamos haciendo es copiar todos los archivos del directorio /etc que comiencen con “host” al directorio /home/aceitunero/archivos_host/.

El comodín [ ]: Los corchete se utilizan para pasar un rango de caracteres, que tomará para realizar la búsqueda, por ejemplo:

aceitunero@Pc15:~$ ls -ld [a-c]*

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
-rw-r--r-- 1 aceitunero aceitunero 79 2011-05-04 19:40 basura.txt

El listado que nos muestra son los archivos o directorios que comienza en “a” hasta la “c” incluidas y como hemos pasado también el carácter comodín “*” tomará cualquier carácter que le preceda. Otros ejemplos:

aceitunero@Pc15:~$ ls -ld [a-c]*o

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
aceitunero@Pc15:~$ ls -ld *[a-c]
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música

El comodín !: La exclamación se utilizan para denegar el rango de caracteres, que se pasa, es decir, tomará todos los caracteres menos los que se pasen para realizar la búsqueda, por ejemplo:

aceitunero@Pc15:~$ ls -ld [!a-c]*

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Descargas
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Documentos
drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Imágenes
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Plantillas
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Videos

El listado que nos muestra son los archivos o directorios que NO comienza por “a” hasta la “c” incluidas y como hemos pasado también el carácter comodín “*” tomará cualquier variación de caracteres. Otros ejemplos:

aceitunero@Pc15:~$ ls -ld [!a-c]*o

drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público


aceitunero@Pc15:~$ ls -ld *[!o-s]

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música

El comodín { }: Las llaves se utilizan para pasar un numero de caracteres, que se usarán para realizar la búsqueda de los archivos y directorios que contenga eso caracteres, por ejemplo:

aceitunero@Pc15:~$ ls -ld {a,b}*

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
-rw-r--r-- 1 aceitunero aceitunero 79 2011-05-04 19:40 basura.txt

El listado que nos muestra son los archivos o directorios que comienza en “a” y los que comienzan por “b” y con el carácter comodín “*” tomará cualquier otro carácter. Otros ejemplos:

aceitunero@Pc15:~$ ls -ld {a,c}*o

ls: no se puede acceder a c*o: No existe el fichero o el directorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio

aceitunero@Pc15:~$ ls -ld *{a,c}

drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música

Como podéis observar estas combinaciones de los comodines nos puede ayudar a la hora de copiar, mover, listar, etc. un conjunto de archivos o directorios de una forma sencilla.

Espero que os sea de ayuda a todos un saludo y espero que dejes tu comentario:

Antonio

15 comentarios:

  1. Gracias!
    Me fue útil para resolver una duda rápidamente.

    ResponderEliminar
    Respuestas
    1. Me alegro mucho que te resultara de ayuda este artículo. Gracias y un saludo.

      Eliminar
  2. Buenas Antonio!

    Gracias por la info. A pesar que el post tiene ya unos 6 años, ¡es tremendamente útil!
    Me estaba volviendo loco intentando mover archivos que comiencen con determinada letra y luego *.

    Un saludo, gracias nuevamente!

    Sir Chaox | IT Repair You

    ResponderEliminar
    Respuestas
    1. Absolutamente cierto, muy bien explicado, los profes podrían darse el trabajo de de explicar asi de simple y ordenado!

      Eliminar
    2. Gracias a vosotros por los ánimos ... aunque si bien es cierto que tengo mi blog un poco abandonado... :-(

      Intentaré ponerle remedio y un millón de gracias de nuevo.

      Eliminar
  3. gracias por publicar la info, me sirvió , un saludo aceitunero

    ResponderEliminar
  4. puedo hacer esto:

    echo $(ls *$Variable*)

    para listar archivos pero con el valor de la variable, que podria hacer?

    ResponderEliminar
    Respuestas
    1. Hola amigo:

      No entiendo muy bien, lo que quieres preguntar, sobre:
      “Puedo hacer esto: echo $(ls *$Variable*) para listar archivos pero con el valor de la variable, que podría hacer?”

      Pero el comando “ls” se usa en #Linux para listar el contenido de directorios y archivos contenidos en un directorio y ver a que usuarios y grupos pertenecen y sus permisos.

      No crees, que estás rizando mucho el rizo.

      Perdona no poderte ayudar más, pero de todas formas estoy a tu disposición, ok

      Un saludo:

      Antonio

      Eliminar
  5. Hola buenas tardes que sigiinifican los caracteres comodines punto y doble punto en Linux .Gracias

    ResponderEliminar
    Respuestas
    1. Hola amigo:

      Tengo que decirte que NO EXISTEN los comodines punto y dos puntos ni en Linux, ni en Windows... 🙁

      Creo que lo que piensas, que se usa como comodín el punto y dos puntos, es cuando hace referencia a una ruta relativa para acceder a un directorio, te pongo este ejemplo en Windows, pero la teoría te sirve para todos los sistemas operativos y sobre todo en el Diseño Web:

      Imagínate que estás en el directorio "Recorded Videos"

      C:\Users\Antonio\Videos>cd "Recorded Videos"
      Compruebo los archivos y subdirectorios, con dir que en Linux es ls
      C:\Users\Antonio\Videos\Recorded Videos>dir

      Directorio de C:\Users\Antonio\Videos\Recorded Videos

      13/04/2017 18:57 DIR .
      13/04/2017 18:57 DIR ..
      13/04/2017 19:00 1.465.856 record_000001.avi
      1 archivos 1.465.856 bytes
      2 dirs 910.456.340.480 bytes libres

      Ahora quiero copiar el video record_000001.avi en la directorio Antonio:

      C:\Users\Antonio\Videos\Recorded Videos> copy record_000001.avi ..\..\Antonio
      1 archivo(s) copiado(s).

      El punto (.) hace referencia al directorio raíz, es decir, al directorio que me encuentro, ya sea home, etc, Document, Antonio o PepeBotijo…

      Los dos puntos (..) hace referencia al directorio inferior, es decir, al directorio que hay debajo de donde me encuentro, ya sea home, etc, Escritorio, Videos o PhotosPor… 😁

      Realmente no son comodines, ok… 😉👍

      Repasa toda la información que puedas sobre las rutas absolutas y relativas, en caso de que tengas dudas, no te cortes, preguntame y si te puedo ayudar cuenta conmigo, ok 😉👍

      Espero haberte ayudado y perdona no haberte contestado antes, es que ando un poco liado con el trabajo, los cursos, los quehaceres… y los que no quehaceres…

      Un saludo:

      Antonio Cruz 🤗

      Eliminar
    2. El . no es el directorio raíz, es el directorio actual.

      El .. no es el directorio inferior, es todo lo contrario, el directorio superior. Además, pueden existir n directorios inferiores pero sólo uno superior.

      No has dado una!

      Eliminar
    3. Gracias por tu aclaración. Llevas toda la razón...

      Disculparme por el error que he cometido. Pido mis disculpas. 😐

      Eliminar
    4. El que va a tener que repasar el tema de las rutas absolutas y relativas... Voy a ser yo 🤔

      Eliminar
  6. Puedo hacer esto?

    Copy /home/*/BN???.txt

    ResponderEliminar
    Respuestas
    1. Sí se puede hacer ese copy. 😎👍

      Buscaría en todos los directorios, que cuelgan de home/, los archivos que empiecen por BN, que tengan tres caracteres y terminen con la extensión TXT.

      Pero a esa línea de comando, le faltan el directorio de destino, dónde tiene que hacer el copy. 😉👍

      Y te recuerdo, que el Linux, aunque se pueden poner, pero no hace falta que los archivos tengan extensiones.

      Un saludo y gracias por tu comentario. 👏😀

      Eliminar

No olvides dejar tu opinión o comentario, entre todos podemos aprender más sobre los temas, que en este Blog se tratan. Y muchas gracias por tu tiempo. 👋😎

Pero sobre todo, no te olvides seguidme en Twitter o Facebook. Gracias. 😎👍