web-dev-qa-db-fra.com

Utilisation des expressions régulières avec ls

J'essaie 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 je lance ce code, j'obtiens cette erreur: ls: .+..+: No such file or directory.

35
Lucas Rezende

Vous confondez une expression régulière avec Shell globbing . Si vous souhaitez utiliser une expression régulière pour faire correspondre les noms de fichiers, vous pouvez procéder comme suit:

$ ls | egrep '.+\..+'
84
Chris Seymour

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 shell supporte bash est globbing, qui utilise des caractères similaires (par exemple, *), mais ce 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