52 votes

Utilisation d'expressions régulières avec ls

J'essaie d'utiliser ER (Expressions régulières étendues) con ls comme ls .+\..+ .

J'essaie d'imprimer tous les fichiers qui contiennent une extension (je sais que j'aurais pu utiliser ls *.* mais je voulais essayer d'utiliser ER).

Lorsque j'exécute ce code, j'obtiens cette erreur : ls: .+..+: No such file or directory .

112voto

iiSeymour Points 34967

Vous confondez expression régulière et globalisation de la coquille . Si vous voulez utiliser une expression régulière pour faire correspondre les noms de fichiers, vous pouvez le faire :

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

6voto

goldilocks Points 6181

Vous ne dites pas quel shell vous utilisez, mais ils ne supportent généralement pas les expressions régulières de cette manière, bien qu'il existe des outils CLI *nix courants ( grep , sed etc) qui le font.

Ce que les interpréteurs de commandes comme bash prennent en charge, c'est [globbing](http://en.wikipedia.org/wiki/Glob%28programming%29)_ qui utilise des caractères similaires (par exemple, *) mais n'est pas la même chose.

Les versions plus récentes de bash disposent d'un opérateur d'expression régulière, =~ :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X