4 votos

Uso de regex en Mac OS X: ¿por qué tengo que añadir \ en {3, 5} ==> \ {3, 5\} ...?

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

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

¿Por qué tengo que empezar las ocurrencias alrededor de la {} con \ ~, como escapar de la secuencia? ¿Hay una manera de utilizar regex estándar como este?

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

Quiero, en última instancia, obtener la lista opuesta de archivos sin extensión, pero esta regex no estándar me está dificultando negar el resultado del grep.

3voto

user3439894 Puntos 5883

Si entiendo bien su pregunta, no es necesario escape el rizadores con un barra invertida si usted formulario el comando correctamente.

En otras palabras, cuando se utiliza un RegRx con grep , hazle saber que el patrón de búsqueda es un RegEx utilizando el -E opción .

Si quiere un partido inverso entonces utilice el -v opción también.

Ejemplo:

ls | grep -E -v '\.[A-Za-z]{0,5}$'
  • Nota: He utilizado {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, utilice {3,5}$ en su lugar.

También puede utilizar el siguiente ejemplo:

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

A veces la extensión de un archivo puede tener números, así que para tener en cuenta eso, utilice como ejemplo:

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

O:

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

Nota: Algunos comandos requieren el opciones para ser pasados individualmente, mientras que otros pueden ser combinados. En este caso, grep permite opciones para ser concatenado. Así, en el ejemplo comandos , -E -v puede expresarse como -Ev o -vE si lo desea.

1voto

Michael Zhou Puntos 167

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

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

Bash soporta los globos extendidos de ksh cuando los habilitas:

shopt -s extglob
printf '%s\n' !(*.*)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X