@OP,
Is glob pettern not only used for file names?
Non, "glob" modèle n'est pas seulement utilisé pour les noms de fichier. vous l'utiliser pour comparer des chaînes ainsi. Dans votre exemple, vous pouvez utiliser cas/esac pour rechercher des chaînes de motifs.
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
In bash, when to use glob pattern and when to use regular expression? Thanks!
Les Regex sont plus souples et plus "pratique" que "glob modèles", cependant, sauf si vous faites des tâches complexes que "globbing/étendue d'expansion" ne peut pas fournir facilement, alors il n'y a pas besoin d'utiliser des regex.
Regex ne sont pas pris en charge pour la version de bash <3.2 (comme dennis mentionné), mais vous pouvez toujours l'utilisation prolongée d'expansion (en définissant extglob
). pour les étendues d'expansion, voir ici et la quelques exemples simples ici.
Mise à jour pour l'OP: Exemple de trouver les fichiers qui commencent par 2 caractères (les points "." signifie 1 char), suivie par "g" utilisation des regex
par exemple sortie
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Ci-dessus, les fichiers sont comparés parce que leurs noms contiennent 2 caractères suivis de "g". (ie ..g
).
L'équivalent avec d'expansion sera quelque chose comme ceci: (voir référence pour le sens de l' ?
et *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g