GNU/Linux >> Tutoriales Linux >  >> Linux

¿En qué se diferencian las expresiones regulares de los comodines utilizados para filtrar archivos?

Mientras usamos * para indicar cero o más caracteres anteriores en grep , usamos *.c para encontrar todos los archivos C cuando lo usamos con ls comando como ls *.c . ¿Alguien podría decir cómo el uso de * difiere en estos dos casos?

Respuesta aceptada:

El nombre de archivo de shell y las expresiones regulares usan algunos de los mismos caracteres y tienen propósitos similares, pero tiene razón, no son compatibles. El englobamiento de nombres de archivos es un sistema mucho menos poderoso.

En nombre de archivo globbing:

  • * significa "cero o más caracteres"

  • ? significa "cualquier carácter individual"

Pero en expresiones regulares, debe usar .* para significar “cero o más caracteres”, y . significa “cualquier carácter individual”. ¿Un ? significa algo bastante diferente en expresiones regulares:cero o una instancia del elemento RE anterior.

Corchetes ([] ) parecen funcionar igual en ambos sistemas en el sistema en el que estoy escribiendo esto, al menos para casos simples. Esto incluye cosas como clases de caracteres POSIX (por ejemplo, [:alpha:] ). Dicho esto, si necesita que sus comandos funcionen en muchos tipos de sistemas diferentes, le recomiendo que no use nada más allá de cosas elementales como listas de caracteres (por ejemplo, [abeq] ) y quizás rangos de caracteres (por ejemplo, [a-c] ).

Estas diferencias significan que los dos sistemas solo son directamente intercambiables para casos simples. Si necesita la coincidencia de expresiones regulares de los nombres de archivo, debe hacerlo de otra manera. find -regex es una opción (Observe que también hay find -name , por cierto, que usa sintaxis glob.)


Linux
  1. Cómo usar expresiones Awk y regulares para filtrar texto o cadenas en archivos

  2. Cómo enumerar los archivos instalados desde un paquete RPM o DEB en Linux

  3. ¿Cómo usar Wget para descargar archivos recursivamente de un directorio web?

  4. ¿Cómo enumerar los archivos eliminados recientemente de un directorio?

  5. ¿Cómo excluir archivos del archivo TAR usando expresiones regulares?

Cómo buscar archivos desde la Terminal en Linux

Cómo compartir archivos de forma segura desde la línea de comandos con ffsend en Linux

Cómo descargar archivos desde servidores Linux remotos

Cómo quitar (^M) caracteres de un archivo en Linux

Cómo quitar todos los caracteres de espacio en blanco de un archivo de texto

¿Cómo eliminar caracteres no válidos de los nombres de archivo?