trova il comando con il quantificatore regex, ad es. {1,2}


14

Ho cercato di creare una stringa di comando find che troverà tutti i file che terminano con un numero 1-99 ma esclude tutti gli altri.

ad es. voglio trovare myfile1 myfile99 ma non myfile456 e non myfilebackup

La regex a cui sto pensando è myfile[1-9]{1,2}ma non riesco a farlo funzionare con find.

find . -regex '.*myfile[0-9]{1,2}' O find . -iname 'myfile[0-9]{1,2}'

Da quello che posso vedere è la {1,2}parte che non funziona.

(a proposito puoi usare in modo -name -regexintercambiabile?)

Qualsiasi aiuto apprezzato.


1
-iname(e -name) usa globs , che non hanno questa sintassi.
l0b0

Risposte:


10

Potresti provare

find . -regex '.*myfile[0-9][0-9]?'

o

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

Grazie - la prima linea funziona per me. Ci avevo provato con -iname ma non credo che supporti la sintassi, altrimenti sto facendo qualcosa di sbagliato.
Lukas88

17

Se hai GNU find, puoi usare un altro tipo di espressione regolare:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Secondo GNU findusa una sintassi delle espressioni regolari di Emacs castrata per impostazione predefinita - Emacs supporta la sintassi, ma almeno GNU non la supporta.\{from,to\}find

Stranamente, il manuale di riferimento non include una sezione sulla sedsintassi delle espressioni regolari, quindi chissà quali parti sono supportate.


1
sedlike edsembra essere un alias per posix-basic, quindi dovrebbe essere compatibile con POSIX BRE (anche se supporta alcune estensioni come \+). Non è compatibile con GNU seddove ad esempio [\n]corrisponde a una nuova riga anziché alla barra rovesciata o nrichiesto da POSIX. Vedi anche -regextype posix-extendedper POSIX ERE (così .*myfile[0-9]{1,2}), anche con estensioni come \so\<
Stéphane Chazelas,

Non ho mai saputo di -regextype. Sembra che se lo usi -regextype egrepsembra che tu possa evitare le barre rovesciate.
Sridhar Sarnobat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.