Problemi con funzionalità avanzate in -regex dell'utilità "trova"

0

Ad esempio, questo non trova il file:

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

Ma questo:

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

Allo stesso tempo, ad esempio:

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

funziona abbastanza bene, anche se apparentemente utilizza lo stesso regcomp() .

Che cosa sto facendo male e come posso risolverlo?

    
posta cave-canem 29.09.2016 - 03:34
fonte

2 risposte

0

ENHANCED FEATURES non è disponibile nell'implementazione corrente di find , come nella versione compilata di find REG_ENHANCED il flag non è passato (vedi regex(3 ) e link ).

    
risposta data 03.10.2016 - 05:43
fonte
1

Sembra che ci sia un bug nella ricerca MacOS nativa in cui la sua opzione -regex non gestisce correttamente nessuna delle scorciatoie descritte in man re_format . Il seguente comando sembra funzionare:

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

Anche questa variante leggermente più semplice sembra funzionare:

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

In breve, l'opzione grep -E e find s -regex non sembrano gestire le espressioni regolari esattamente nello stesso modo.

    
risposta data 29.09.2016 - 17:23
fonte

Leggi altre domande sui tag