Je me demande la règle générale pour utiliser une expression régulière dans la clause if dans bash?
Voici un exemple
$ gg=svm-grid-ch
$ if [[ $gg == *grid* ]] ; then echo $gg; fi
svm-grid-ch
$ if [[ $gg == ^....grid* ]] ; then echo $gg; fi
$ if [[ $gg == ....grid* ]] ; then echo $gg; fi
$ if [[ $gg == s...grid* ]] ; then echo $gg; fi
$
Pourquoi les trois derniers ne correspondent pas?
J'espère que vous pourriez donner autant de règles générales que possible, pas seulement pour cet exemple.
Utilisation
=~
pour les expressions régulières, vérifiez la table des matières du didacticiel sur les expressions régulières
la source
la source
Ajout de cette solution avec
grep
et des fonctionssh
intégrées de base pour ceux qui sont intéressés par une solution plus portable (indépendante de labash
version; fonctionne également avec des platessh
-formes non-Linux, etc.)Certaines
grep
incarnations prennent également en charge l'-q
option (calme) comme alternative à la redirection vers/dev/null
, mais la redirection est à nouveau la plus portable.la source
grep -q
place degrep >/dev/null
.@OP,
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.
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
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*
)la source
ls ..g
ne fonctionne pas. Vous dites au shell de rechercher un fichier nommé..g
. En ce qui concerne l' apprentissage de la syntaxe des expressions régulières, vous pouvez essayerperldoc perlretut
,perldoc perlrequick
ou faireinfo sed
sur la ligne de commande.