2013-03-11 16 views
27

Sto tentando di utilizzare ER (Extended Regular Expressions) con ls come ls .+\..+.Uso di espressioni regolari con ls

Sto provando a stampare tutti i file che contengono un'estensione (so che avrei potuto usare ls *.*, ma volevo provare ad usare ER).

Quando eseguo quel codice ottengo questo errore: ls: .+..+: No such file or directory.

+5

Penso che tu sia RE confuse e caratteri jolly della shell. La risposta dipenderà anche da cosa lei userà. – Madbreaks

+1

Quindi non posso usare RE in ls? –

+2

A meno che tu non stia usando uno script non convenzionale, per ls, ls non prenda espressioni regolari. Inoltre, il sistema operativo elaborerà caratteri jolly speciali come * prima di passare al comando. Prova a utilizzare 'trova' invece – GetSet

risposta

57

Si sta confondendo l'espressione regolare con shell globbing. Se si desidera utilizzare espressioni regolari per abbinare i nomi dei file che si possa fare:

$ ls | egrep '.+\..+' 
+1

Capito. Quindi, prima di tutto devo verificare se quello che sto cercando di usare accetta RE. –

+2

Se il pattern non può essere abbinato con 'globbing' da solo, allora dovrai usare un metodo alternativo. * F.Y.I * lo strumento 'find' supporta la corrispondenza con regexp. –

3

non dici quello shell che si sta utilizzando, ma in genere non supportare le espressioni regolari in questo modo, anche se ci sono comuni * nix strumenti CLI (grep, sed, ecc.).

Quali shell come bash do support è globbing, che utilizza alcuni caratteri simili (ad esempio *) ma non è la stessa cosa.

versioni più recenti di bash hanno un operatore di espressione regolare, =~:

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
     echo $x; 
    fi; 
done 
+1

Fantastico! Non ne ho mai sentito parlare! :) Quindi è solo usare '= ~' e l'interprete capirà che quello che sto cercando di abbinare è un RE? –

+3

Devi usarlo nel contesto di un * test *, credo con parentesi doppie, quindi per questo caso specifico il piping tramite (e) grep è molto più semplice. Ma è utile saperlo. – delicateLatticeworkFever

+1

Grazie mille per il tuo aiuto! Ricorderò questo suggerimento! ;) –