2010-07-01 6 views
0

J'ai utilisé le RE suivant:expression régulière pour correspondre à des fichiers

^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))? 

selon ce qui suit

file1.bla 

ou

file1.1 

ou

file1.1.bla 

mais après:

ls "^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))?" 

je ne vois aucune correspondance des fichiers pertinents pourquoi? Yael

+0

Ceci est un double de http://stackoverflow.com/questions/3159725/regular-expressions-to-match-files -with-speecial-format que @yael a également demandé –

Répondre

2

ls ? et * et []

si vous avez besoin d'utiliser regex, utilisez find

find . -regex '.*/regularexpression' 
2

Utilisez plutôt ls -1 | grep "^file(\d{1,3})(\w*)(?:\.(\d{0,3})(\w*))?". Cela canalise la sortie de ls vers grep, et grep filtre l'entrée (qui est redirigée depuis ls) avec l'expression rationnelle.

+0

s'il vous plaît donnez-moi l'exemple – yael

+1

Vous voulez probablement ls -1, sinon vous obtiendrez plusieurs fichiers par ligne. – mikerobi

+0

@yeal, il vous a donné un exemple. – mikerobi

0

Qu'est-ce que vous pouvez utiliser est le nom de fichier de englobement du shell (correspondant moins puissant que SRE) décrit here et ailleurs

0

ls -1 | perl -ne 'imprimer si/^ fichier(\d{1,3})(\w*)(?:.(\d{0,3})(\w*))?/'

(grep -P est supposé utiliser Perl regexp mais sur mon système cela ne semble pas fonctionner.La seule façon d'être sûr que vous utilisez les expressions régulières Perl est d'utiliser Perl.)

Questions connexes