astérisque (*) et astérisque point (. *) dans l’expression régulière unix

Je me retrouve toujours confondu avec l’utilisation de ces deux caractères génériques sous UNIX. Je comprends que l’astérisque ne peut être utilisé que comme un quantificateur dans une expression rationnelle, mais UNIX permet * dans certains cas, comme la commande ls alors que dans grep il ne devrait être utilisé que comme un quantificateur. Y a-t-il une règle là-bas qui me guidera lequel de ceux à utiliser?

Vous parlez de deux types de motifs distincts dans UNIX, le glob (caractère générique) et l’ expression régulière .

Les globes sont généralement utilisés lors de la correspondance de noms de fichiers. Votre shell effectue automatiquement l’extension de caractères génériques sur les arguments de commande, ce qui vous permet d’écrire

 ls *foo* 

pour lister tous les fichiers contenant la chaîne foo . Les globes sont très simples (en ignorant extglob ): la syntaxe ne supporte généralement que * (tous les caractères) et ? (n’importe quel personnage). En raison de l’expansion automatique du shell, celles-ci peuvent être utilisées n’importe où et doivent être explicitement supprimées pour éviter les correspondances indésirables (par exemple, écrire grep '.*foo.*' Pour éviter d’étendre le * dans le modèle).

D’un autre côté, nous avons des expressions régulières, qui sont utilisées pour faire correspondre le texte au motif. Typiquement, ceux-ci sont utilisés avec des utilitaires spécifiques tels que grep , sed et perl qui comprennent ces patterns, bien que certains shells aient des contextes qui requièrent des regex (par exemple, ${x/pat/sub} ). La syntaxe des expressions régulières est beaucoup plus puissante, ce qui la rend idéale pour parcourir des rames de texte pour des motifs spécifiques.