He intentado crear una cadena de comando de búsqueda que encuentre todos los archivos que terminan con un número del 1 al 99 pero excluye a todos los demás. .
p. ej. 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}
la parte que no funciona.
(por cierto ¿Puedes usar -name -regex
de manera intercambiable?)
Se agradece cualquier ayuda.
Comentarios
Respuesta
Puede intentar
find . -regex ".*myfile[0-9][0-9]?"
o
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Comentarios
- Gracias, la primera línea es trabajo ng para mí. Intenté esto con -iname pero no ' creo que admita la sintaxis o de lo contrario ' estoy haciendo algo mal.
Respuesta
Si tiene GNU find, puede usar otro tipo de expresión regular:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Según GNU, find
utiliza un castrado Sintaxis de expresión regular de Emacs de forma predeterminada: Emacs admite la sintaxis \{from,to\}
, pero al menos GNU find
no lo admite.
Curiosamente, el manual de referencia no incluye una sección sobre la sed
sintaxis de expresiones regulares, así que quién sabe qué partes de él son compatibles.
Comentarios
-
sed
comoed
parece ser un alias paraposix-basic
, por lo que debería ser compatible con POSIX BRE (aunque admite algunos ex tensiones como\+
). ' no es compatible con GNUsed
donde, por ejemplo,[\n]
coincide con una nueva línea en lugar de la barra invertida on
requerida por POSIX. Consulte también-regextype posix-extended
para POSIX ERE (por lo que.*myfile[0-9]{1,2}
), también con extensiones como\s
o\<
- Nunca supe sobre -regextype. Parece que si usa
-regextype egrep
parece que puede evitar las barras invertidas.
-iname
(y-name
) usan globs , que hacen no tiene esta sintaxis.