0 votes

Problèmes liés aux fonctionnalités améliorées dans -regex de l'utilitaire "find".

Par exemple, ceci ne trouve pas le fichier :

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

Mais ça, oui :

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

En même temps, par exemple :

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

fonctionne assez bien, bien qu'il semble utiliser la même regcomp() .

Qu'est-ce que je fais mal et comment puis-je le réparer ?

1 votes

OS X plus récent grep utiliser un BSD base de code, et non GNU grep . Le site -E L'option est un mélange de POSIX ERE and PCRE et je crois qu'il est exclusif à OS X. find utilise BRE y ERE et le \d la classe de caractères n'est pas valide.

0 votes

@fd0 Meilleur commentaire !

1voto

Eirik Fuller Points 700

Il semble qu'il y ait un bug dans la recherche native de MacOS dans lequel son -regex ne gère pas correctement les raccourcis décrits dans la section "Raccourcis". man re_format . La commande suivante semble fonctionner :

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

Cette variante légèrement plus simple semble également fonctionner :

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

En bref, grep -E y find s -regex ne semblent pas traiter les expressions régulières exactement de la même manière.

0 votes

@Erik Fuller, je pense qu'il s'agit de quelque chose de différent, ainsi que de la gfind . -regextype 'egrep' -regex '^(.*)(\d{2})' -print 2>/dev/null ne fonctionne pas

0 votes

Il est possible que gfind ait le même bug. Dans tous les cas, il semble y avoir une solution de contournement viable.

0 votes

Le problème est que cela exclut toute la classe des "RE de base améliorées et étendues améliorées". Dans ce cas, la raison pour laquelle "egrep" fonctionne correctement n'est pas claire, car il utilise également les mêmes regcomp ()

1voto

cave-canem Points 313

ENHANCED FEATURES n'est pas disponible dans l'implémentation actuelle de find comme dans la version compilée de find REG_ENHANCED n'est pas passé (voir regex(3 ) et https://opensource.apple.com/source/shell_cmds/shell_cmds-187/find/main.c ).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X