Uso delle regex in Mac OS X: perché devo aggiungere \ in {3, 5} == \ {3, 5 \} ...?

4

Sto cercando di trovare tutti i file con nessuna estensione in una cartella particolare, e dopo molti tentativi ho finalmente trovato questa espressione regolare:

ls | grep "\.[A-Za-z]\{3,5\}$"

Perché devo iniziare le occorrenze attorno a {} con \, come se fuggissi dalla sequenza? C'è un modo per usare espressioni regolari come questo?

ls | grep "\.[A-Za-z]{3,5}$"

Voglio, in definitiva, ottenere l'elenco opposto dei file con no-extension, ma questa regex non standard sta rendendo difficile per me negare il risultato di grep.

    
posta user_dhrn 04.03.2017 - 21:39
fonte

2 risposte

1

Se la tua shell è ksh, puoi elencare i file nella directory corrente senza un'estensione come questa:

printf '%s\n' !(*.*)

Bash supporta i globi estesi di ksh quando li abiliti:

shopt -s extglob
printf '%s\n' !(*.*)
    
risposta data 05.03.2017 - 01:56
fonte
3

Se comprendo correttamente la tua domanda, non hai bisogno di escape le parentesi graffe con una barra rovesciata se tu modulo il comando correttamente.

In altre parole, quando usi un RegRx con grep , fai sapere che il modello di ricerca è un RegEx usando la -E opzione .

Se vuoi una corrispondenza inversa , utilizza anche l'opzione -v .

Esempio:

ls | grep -E -v '\.[A-Za-z]{0,5}$'
  • Nota Ho usato {0,5}$ anziché {3,5}$ per tenere conto di qualsiasi estensione fino a 5 caratteri. Se desideri includere file che potrebbero avere un'estensione di 1 o 2 caratteri, utilizza invece {3,5}$ .

Puoi anche usare il seguente esempio:

ls | grep -E -v '\.[[:alpha:]]{0,5}$'

A volte un'estensione di file può contenere dei numeri, quindi per tenerne conto, usa come esempio:

ls | grep -E -v '\.[A-Za-z0-9]{0,5}$'

o

ls | grep -E -v '\.[[:alnum:]]{0,5}$'

Nota: alcuni comandi richiedono che le opzioni siano passate individualmente, mentre altre possono essere combinate. In questo caso, grep consente di concatenare opzioni . Quindi nell'esempio comandi , -E -v può essere espresso come -Ev o -vE , se lo desideri.

    
risposta data 04.03.2017 - 22:38
fonte

Leggi altre domande sui tag