Uso de expresiones regulares en Mac OS X: ¿por qué tengo que agregar \ en {3, 5} == \ {3, 5 \} ...?

4

Estoy tratando de encontrar todos los archivos sin extensión en una carpeta en particular, y después de muchos intentos finalmente encontré esta declaración de expresión regular:

  

ls | grep "\.[A-Za-z]\{3,5\}$"

¿Por qué tengo que iniciar las incidencias alrededor de {} con \, como escapar de la secuencia? ¿Hay alguna forma de usar expresiones regulares como esta?

  

ls | grep "\.[A-Za-z]{3,5}$"

Quiero, finalmente, obtener la lista opuesta de archivos sin extensión, pero esta expresión regular no estándar hace que sea difícil para mí negar el resultado del grep.

    
pregunta user_dhrn 04.03.2017 - 21:39

2 respuestas

1

Si su shell es ksh, entonces podría listar los archivos en el directorio actual sin una extensión como esta:

printf '%s\n' !(*.*)

Bash admite ksh globs extendidos cuando los habilitas:

shopt -s extglob
printf '%s\n' !(*.*)
    
respondido por el fd0 05.03.2017 - 01:56
3

Si entiendo su pregunta correctamente, no necesita escapar de curly-braces con backslash si forma el comando correctamente.

En otras palabras, cuando use un RegRx con grep , hágale saber que el patrón de búsqueda es un RegEx usando el -E opción .

Si desea una coincidencia inversa , use la opción -v también.

Ejemplo:

ls | grep -E -v '\.[A-Za-z]{0,5}$'
  • Nota: usé {0,5}$ en lugar de {3,5}$ para tener en cuenta cualquier extensión de hasta 5 caracteres. Si desea incluir archivos que puedan tener una extensión de 1 o 2 caracteres, use {3,5}$ en su lugar.

También puedes usar el siguiente ejemplo:

ls | grep -E -v '\.[[:alpha:]]{0,5}$'

A veces, una extensión de archivo puede tener números, así que para tenerlo en cuenta, úselo como ejemplo:

ls | grep -E -v '\.[A-Za-z0-9]{0,5}$'

O:

ls | grep -E -v '\.[[:alnum:]]{0,5}$'

Nota: Algunos comandos requieren que las opciones se pasen individualmente, mientras que otros se pueden combinar. En este caso, grep permite concatenar opciones . Entonces, en el ejemplo comandos , -E -v puede expresarse como -Ev o -vE , si lo desea.

    
respondido por el user3439894 04.03.2017 - 22:38

Lea otras preguntas en las etiquetas