grep avec des regexp: les espaces blancs ne correspond pas à moins que j'ai ajouter une assertion
GNU grep 2.5.4 sur le coup 4.1.5(1) sur Ubuntu 10.04
Cela correspond
$ echo "this is a line" | grep 'a[[:space:]]\+line'
this is a line
Mais ce n'est pas
$ echo "this is a line" | grep 'a\s\+line'
Mais cela correspond aussi
$ echo "this is a line" | grep 'a\s\+\bline'
this is a line
Je ne comprends pas pourquoi #2 ne correspond pas (alors que # 1) et n ° 3 montre également un match. Quelle est la différence ici?
- il fonctionne pour moi avec GNU grep 2.8 $ echo "ceci est une ligne" | grep 'a\s\+en ligne' ; echo $? c'est une ligne de 0
- 2 et 3 ne fonctionnent pas pour moi (GNU grep 2.5.1)
- Tous les trois travaillent pour moi: Cygwin avec GNU grep 2.6.3
- Je suis plus intéressé à savoir pourquoi #2 ne correspondent pas, mais #3 ne. Un zéro supplémentaire de la largeur de l'affirmation (limite de mot) fait une telle différence ?
- À cause de bugs dans grep 2.5 Regardez ici: [Grep espace blanc, comportement][1] [1]: stackoverflow.com/questions/4233159/...
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à votre
grep
page de manuel. Perl a ajouté beaucoup de l'expression régulière extensions qui n'étaient pas dans la spécification d'origine. Cependant, parce qu'ils avéré si utile, de nombreux programmes adoptés.Malheureusement,
grep
est parfois coincé dans le passé parce que vous voulez vous assurer que votregrep
commande reste compatible avec les anciennes versions degrep
.Certains systèmes ont
egrep
avec quelques extensions. D'autres vous permettent d'utilisergrep -E
pour les obtenir. D'autres encore ont ungrep -P
qui permet d'utiliser des extensions Perl. Je crois que Linux systèmes de commande grep pouvez utiliser le-P
extension qui n'est pas disponible dans la plupart des systèmes Unix, à moins que quelqu'un a remplacé le grep avec la version GNU. Les nouvelles versions de Mac OS X également en charge la-P
interrupteur, mais pas les anciennes versions.grep
et ne reconnaît pas à autre chose qu'à la base très regex. Il n'y a rien dans ce vaste espace vide sans espaces? Un caractère de tabulation peut-être?grep
ne prend pas en charge l'ensemble des expressions régulières, donc essayez d'utiliser-P
pour activer les expressions régulières de perl. Vous n'avez pas besoin d'échapper à la+
c'est à dire