Utilisation d'expressions régulières avec ls

Je suis en train d'utiliser ER (Expressions Régulières Étendues) avec ls comme ls .+..+.

J'essaie d'imprimer tous les fichiers contenant 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.

28
demandé sur Chris Seymour 2013-03-11 22:33:00

2 réponses

Vous êtes confus expression régulière avec coquille d'expansion. Si vous voulez utiliser une expression régulière pour faire correspondre les noms de fichiers, vous pouvez faire:

$ ls | egrep '.+\..+'
67
répondu Chris Seymour 2013-03-11 18:38:27

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

Ce que les coquilles comme bash supportent est globbing, qui utilise des caractères similaires (par exemple, *) mais n'est pas la même chose.

Les nouvelles versions de bash ont un opérateur d'expression régulière, =~:

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
        echo $x; 
    fi; 
done
4
répondu delicateLatticeworkFever 2013-03-11 18:43:02