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
.
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 '.+\..+'
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