1 votes

Perl RegEx dans le terminal Mac : grep -p "^([^\t]*\t){2}mypattern\t" textfile.txt ne fonctionne pas

Je suis un débutant dans l'utilisation des commandes de programmation.

Pourquoi {2} ne fonctionne pas après ([^\t]*\t) dans le terminal macOS?

Est-ce qu'il y a un site web qui propose des expressions régulières Perl qui fonctionnent sur mac? Merci!

2voto

Michael Zhou Points 167

bsd grep n'utilise pas les expressions régulières perl. Veuillez lire man grep et noter ce que l'option -p fait. Encore, man 7 re_format explique comment fonctionne regex sous macOS avec des outils tels que grep et sed.

Dans votre expression régulière, le caractère \t n'est pas interprété comme le caractère de contrôle de tabulation. Vous devrez donc taper le caractère de tabulation littéral (contrôle + v, tab) à la place -

grep -E '^([^   ]*      ){2}mypattern ' FICHIER

ou vous pouvez utiliser la cotation ansi-c (Les mots de la forme $'chaîne' sont traités spécialement. Le mot se développe en chaîne, les caractères échappés par des anti-slash étant remplacés comme spécifié par la norme ANSI C.) -

grep -E $'^([^\t]*\t){2}mypattern\t' FICHIER

Vous pouvez également utiliser directement perl -

perl -ne  'print if /^([^\t]*\t){2}mypattern\t/' FICHIER

1voto

Graham Miln Points 39606

RegExPlanet propose une page de test d'expression régulière pour Perl. Cette page fonctionne avec Safari sur macOS 10.12.

Vous pourriez constater que grep inclus dans macOS ne propose pas toutes les fonctionnalités que vous souhaitez. Si c'est le cas, essayez d'installer grep à partir de Homebrew ou MacPorts.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X