comando de búsqueda con cuantificador de expresiones regulares, por ejemplo, {1,2}

14

He estado tratando de crear una cadena de comando de búsqueda que encuentre todos los archivos que terminen con un número 1-99 pero excluya todos los demás.

por ejemplo, quiero encontrar myfile1 myfile99 pero no myfile456 y no myfilebackup

La expresión regular en la que estoy pensando es myfile[1-9]{1,2}pero no puedo hacer que esto funcione con find.

find . -regex '.*myfile[0-9]{1,2}' O find . -iname 'myfile[0-9]{1,2}'

Por lo que puedo ver, es la {1,2}parte que no funciona.

(Por cierto, ¿puedes usar -name -regexintercambiablemente?)

Cualquier ayuda apreciada.

Lukas88
fuente
1
-iname(y -name) use globos , que no tienen esta sintaxis.
l0b0

Respuestas:

10

Tu podrías intentar

find . -regex '.*myfile[0-9][0-9]?'

o

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
l0b0
fuente
Gracias, la primera línea está funcionando para mí. Había intentado esto con -iname pero no creo que sea compatible con la sintaxis o de lo contrario estoy haciendo algo mal.
Lukas88
17

Si tiene GNU find, puede usar otro tipo de expresión regular:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Según GNU, findutiliza una sintaxis de expresión regular neutralizada de Emacs de manera predeterminada: Emacs admite la \{from,to\}sintaxis, pero al menos GNU findno la admite.

Curiosamente, el manual de referencia no incluye una sección sobre la sedsintaxis de la expresión regular, por lo que quién sabe qué partes son compatibles.

l0b0
fuente
1
sedlike edparece ser un alias para posix-basic, por lo que debería ser compatible con POSIX BRE (aunque admite algunas extensiones como \+). No es compatible con GNU seddonde, por ejemplo, [\n]coincide con una nueva línea en lugar de la barra diagonal inversa o lo nrequiere POSIX. Ver también -regextype posix-extendedpara ERE POSIX (así .*myfile[0-9]{1,2}), también con extensiones como \so\<
Stéphane Chazelas
Nunca supe sobre -regextype. Parece que si lo usas -regextype egrepparece que puedes evitar las barras invertidas.
Sridhar Sarnobat