@OP,
Le glob pettern n'est-il pas seulement utilisé pour les noms de fichiers?
Non, le modèle "glob" n'est pas seulement utilisé pour les noms de fichiers. vous pouvez également l'utiliser pour comparer des chaînes. Dans vos exemples, vous pouvez utiliser case / esac pour rechercher des modèles de chaînes.
gg=svm-grid-ch
# looking for the word "grid" in the string $gg
case "$gg" in
*grid* ) echo "found";;
esac
# [[ $gg =~ ^....grid* ]]
case "$gg" in ????grid*) echo "found";; esac
# [[ $gg =~ s...grid* ]]
case "$gg" in s???grid*) echo "found";; esac
Dans bash, quand utiliser le modèle glob et quand utiliser une expression régulière? Merci!
Les expressions régulières sont plus polyvalentes et "pratiques" que les "modèles globaux", mais à moins que vous n'effectuiez des tâches complexes que le "globbing / globbing étendu" ne peut pas fournir facilement, alors il n'est pas nécessaire d'utiliser des expressions régulières. Les expressions régulières ne sont pas prises en charge pour la version de bash <3.2 (comme dennis l'a mentionné), mais vous pouvez toujours utiliser le globbing étendu (en définissant extglob
). pour le globbing étendu, voir ici et quelques exemples simples ici .
Mise à jour pour OP: Exemple de recherche de fichiers commençant par 2 caractères (les points "." Signifie 1 caractère) suivis de "g" en utilisant regex
par exemple sortie
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Dans ce qui précède, les fichiers sont mis en correspondance car leurs noms contiennent 2 caractères suivis de "g". (c'est à dire..g
).
L'équivalent avec le globbing sera quelque chose comme ceci: (regardez la référence pour la signification de ?
et *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g