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