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 -regex
intercambiablemente?)
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,
find
utiliza una sintaxis de expresión regular neutralizada de Emacs de manera predeterminada: Emacs admite la\{from,to\}
sintaxis, pero al menos GNUfind
no la admite.Curiosamente, el manual de referencia no incluye una sección sobre la
sed
sintaxis de la expresión regular, por lo que quién sabe qué partes son compatibles.fuente
sed
likeed
parece ser un alias paraposix-basic
, por lo que debería ser compatible con POSIX BRE (aunque admite algunas extensiones como\+
). No es compatible con GNUsed
donde, por ejemplo,[\n]
coincide con una nueva línea en lugar de la barra diagonal inversa o lon
requiere POSIX. Ver también-regextype posix-extended
para ERE POSIX (así.*myfile[0-9]{1,2}
), también con extensiones como\s
o\<
-regextype egrep
parece que puedes evitar las barras invertidas.