2013-03-10 5 views
4

Je me suis toujours trouvé confondu avec l'utilisation de ces deux caractères génériques dans UNIX. Je comprends astérisque peut être utilisé uniquement comme un quantificateur dans une expression rationnelle, mais UNIX permet * dans certains cas comme la commande ls alors que grep il devrait être utilisé uniquement comme un quantificateur. Y a-t-il une règle qui me guidera laquelle utiliser?astérisque (*) et point-astérisque (. *) Dans l'expression régulière unix

+5

Vous êtes confus entre 'regex' et' glob'. –

Répondre

8

Vous parlez de deux types distincts de modèles dans UNIX, le glob (génériques) et l'expression régulière .

Les globes sont généralement utilisés lors de l'appariement de noms de fichiers. Votre shell fait expansions génériques automatiquement sur des arguments de commande, qui est comment vous pouvez écrire

ls *foo* 

à la liste tous les fichiers contenant la chaîne foo. Globs sont très simples (en ignorant extglob): la syntaxe prend généralement uniquement en charge * (tous les caractères) et ? (un caractère). En raison de l'expansion automatique du shell, ceux-ci peuvent être utilisés n'importe où et doivent être explicitement supprimés pour éviter toute correspondance indésirable (par exemple, écrire grep '.*foo.*' pour éviter d'étendre le * dans le modèle). D'autre part, nous avons des expressions régulières, qui sont utilisées pour faire correspondre le texte. Typiquement, ceux-ci sont utilisés avec des utilitaires spécifiques tels que grep, sed et perl qui comprennent ces modèles, bien que certains shells aient des contextes qui prennent regex (par exemple ${x/pat/sub} de Bash). La syntaxe d'expression régulière est beaucoup plus puissante, ce qui la rend idéale pour regarder des rames de texte pour des motifs spécifiques.

+0

Cela l'explique clairement! Merci d'avoir pris le temps de corriger cette réponse détaillée. – toddlermenot

Questions connexes