regex - probar - ¿Cómo usar expresiones regulares con comando de búsqueda?
expresiones regulares java (7)
Tengo algunas imágenes nombradas con la cadena uuid1 generada. Por ejemplo, 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg. Quiero descubrir todas estas imágenes usando el comando "buscar":
find . -regex "[a-f0-9/-]/{36/}/.jpg".
Pero no funciona. Algo mal con el regex? ¿Podría alguien ayudarme con esto?
A juzgar por otras respuestas, parece que esto podría ser culpa del hallazgo.
Sin embargo puedes hacerlo de esta manera:
find . * | grep -P "[a-f0-9/-]{36}/.jpg"
Puede que tenga que ajustar un poco el grep y usar diferentes opciones dependiendo de lo que quiera pero funciona.
Debe utilizar la ruta de directorio absoluta al aplicar la instrucción de búsqueda con expresiones regulares. En tu ejemplo, la
find . -regex "[a-f0-9/-]/{36/}/.jpg"
debe ser cambiado en
find . -regex "./[a-f0-9/-]/{36/}/.jpg"
En la mayoría de los sistemas Linux, algunas disciplinas en expresiones regulares no pueden ser reconocidas por ese sistema, por lo que tiene que señalar explícitamente -regexty como
find . -regextype posix-extended -regex "[a-f0-9/-]/{36/}/.jpg"
Intente usar comillas simples ('') para evitar que el shell se escape de su cadena. Recuerde que la expresión debe coincidir con la ruta completa, es decir, debe tener el siguiente aspecto:
find . -regex ''/./[a-f0-9-]*.jpg''
Aparte de eso, parece que mi hallazgo (GNU 4.4.2) solo conoce expresiones regulares básicas, especialmente no la sintaxis {36}. Creo que tendrás que arreglártelas sin eso.
La expresión -regex
find coincide con el nombre completo , incluida la ruta relativa desde el directorio actual. Para find .
esto siempre comienza con ./
, luego cualquier directorio.
Además, estas son expresiones regulares de emacs
, que tienen otras reglas de escape que las expresiones regulares egrep habituales.
Si estos están todos directamente en el directorio actual, entonces
find . -regex ''/./[a-f0-9/-]/{36/}/.jpg''
Deberia trabajar. (No estoy seguro, no puedo hacer que la repetición contada funcione aquí). Puede cambiar a las expresiones -regextype posix-egrep
por -regextype posix-egrep
:
find . -regextype posix-egrep -regex ''/./[a-f0-9/-]{36}/.jpg''
(Tenga en cuenta que todo lo que se dice aquí es para GNU find, no sé nada acerca del BSD, que también es el predeterminado en Mac).
Manera simple: puede especificar. * Al principio porque la búsqueda coincide con la ruta completa.
$ find . -regextype egrep -regex ''.*[a-f0-9/-]{36}/.jpg$''
encontrar versión
$ find --version
find (GNU findutils) 4.6.0
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
FTS(FTS_CWDFD) CBO(level=2)
en Mac (búsqueda de BSD) : igual que la respuesta aceptada, se necesita el prefijo .*/
para coincidir con una ruta completa:
$ find -E . -regex ".*/[a-f0-9/-]{36}.jpg"
man find
dice -E
usa soporte extendido de expresiones regulares
find . -regextype sed -regex ".*/[a-f0-9/-]/{36/}/.jpg"
Tenga en cuenta que debe especificar .*/
principio porque la find
coincide con la ruta completa.
Ejemplo:
susam@nifty:~/so$ find . -name "*.jpg"
./foo-111.jpg
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype sed -regex ".*/[a-f0-9/-]/{36/}/.jpg"
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
Mi versión de encontrar:
$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)
susam@nifty:~/so$
susam@nifty:~/so$ find . -regextype foo -regex ".*/[a-f0-9/-]/{36/}/.jpg"
find: Unknown regular expression type `foo''; valid types are `findutils-default'', `awk'', `egrep'', `ed'', `emacs'', `gnu-awk'', `grep'', `posix-awk'', `posix-basic'', `posix-egrep'', `posix-extended'', `posix-minimal-basic'', `sed''.