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.
bash
find
regular-expression
Lukas88
fuente
fuente

-iname(y-name) use globos , que no tienen esta sintaxis.Respuestas:
Tu podrías intentar
o
fuente
Si tiene GNU find, puede usar otro tipo de expresión regular:
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 GNUfindno 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.fuente
sedlikeedparece ser un alias paraposix-basic, por lo que debería ser compatible con POSIX BRE (aunque admite algunas extensiones como\+). No es compatible con GNUseddonde, por ejemplo,[\n]coincide con una nueva línea en lugar de la barra diagonal inversa o lonrequiere POSIX. Ver también-regextype posix-extendedpara ERE POSIX (así.*myfile[0-9]{1,2}), también con extensiones como\so\<-regextype egrepparece que puedes evitar las barras invertidas.