0 votos

Problemas con las funciones mejoradas en -regex de la utilidad "find"

Por ejemplo, esto no encuentra el archivo:

: > 12; basename $(find -E . -regex '^(.*)(\d{2})' -print 2>/dev/null)

Pero esto sí:

basename $(find -E . -regex '^(.*)([0-9]{2})' -print 2>/dev/null)

Al mismo tiempo, por ejemplo:

echo -e '12\nabc\n456' | grep -E -e '^(\d{3})'

funciona bastante bien, aunque parece que utiliza el mismo regcomp() .

¿Qué estoy haciendo mal y cómo puedo solucionarlo?

1 votos

Nuevo OS X grep utilizar un BSD base de código, no GNU grep . El -E opción es un mosh de POSIX ERE and PCRE y creo que exclusivo de OS X. find utiliza BRE y ERE y el \d la clase de carácter no es válida.

0 votos

@fd0 El mejor comentario.

1voto

Eirik Fuller Puntos 53

Parece que hay un error en el hallazgo nativo de MacOS en el que su -regex no maneja correctamente ninguno de los accesos directos descritos en man re_format . El siguiente comando parece funcionar:

find -E . -regex '^(.*)([[:digit:]]{2})' -print

Esta variante ligeramente más sencilla también parece funcionar:

find -E . -regex '.*[[:digit:]]{2}' -print

En resumen, grep -E y find s -regex no parecen manejar las expresiones regulares exactamente de la misma manera.

0 votos

@Erik Fuller, creo que se trata de algo diferente, así como la gfind . -regextype 'egrep' -regex '^(.*)(\d{2})' -print 2>/dev/null no funciona

0 votos

Es posible que gfind tenga el mismo error. En cualquier caso, parece que hay una solución viable.

0 votos

El problema es que deja fuera toda la clase de "REs básicos y extendidos mejorados". En este caso no está claro por qué "egrep" funciona correctamente, porque también utiliza el mismo regcomp ()

1voto

NoseKnowsAll Puntos 573

ENHANCED FEATURES no está disponible en la implementación actual de find como en la versión compilada de find REG_ENHANCED no se pasa (Ver regex(3 ) y https://opensource.apple.com/source/shell_cmds/shell_cmds-187/find/main.c ).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X