2013-02-15 4 views
0

Je veux vérifier si ma variable a ce format --- foobar---> <some other stuff> En d'autres termes, je veux savoir si le texte commence par --- foobar --->comparer le texte (avec des tirets) en utilisant un script shell regex

J'utilisé grep -q mais nous avons eu cette erreur:

$echo "--- foobar---> subtree " | grep -q "--- fooobar--->*" 
grep: unrecognized option `--- fooobar--->*' 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try `grep --help' for more information. 

(Ceci est OSX et grep's version is:

$ grep --v 
grep (GNU grep) 2.5.1 

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

)

Comment réécrire ma regex pour correspondre à la chaîne attendue?

Merci.

+0

pouvez-vous clarifier sur ce que vous attendez le * à agir? dès maintenant, comme il est écrit, vous lui dites de faire correspondre votre chaîne avec 0 ou plus ">" à la fin. Si vous voulez dire n'importe quel caractère après votre expression, il ressemblerait à ceci. "--- fooobar --->. *" – cepatt

+0

Comme un commentaire secondaire, vous pouvez construire et tester des expressions régulières sur [www.regexlib.com] (www. regexlib.com) – cepatt

+0

Juste ajouté la clarification. Je veux vérifier si le texte commence par '--- foobar --->' – user1508893

Répondre

3

Vous pouvez corriger l'erreur en ajoutant -e juste avant votre regex:

grep -q -e "--- fooobar--->*" 

De page man:

-e PATTERN, --regexp=PATTERN 
     Use PATTERN as the pattern; useful to protect patterns beginning with -. 

En ce qui concerne l'expression rationnelle lui-même, * en regex signifie « répéter le caractère précédent zéro ou plusieurs fois ", donc votre regex recherche --- fooobar--- et ensuite 0 ou > caractères.

Si vous voulez faire correspondre un nombre quelconque de caractère, utilisez .* à la place:

grep -q -e "--- fooobar--->.*" 

Cependant, comme il semble que vous êtes juste vérifier si la ligne correspond ou non, le .* à la fin n'est pas changeant vraiment quelque chose, il se comporterait de la même manière si vous l'enleviez entièrement.

Vous pouvez également ajouter un ^ au début de votre modèle, ceci est une ancre de début de ligne afin que vous ne correspondiez pas à des lignes comme "un autre contenu ... --- fooobar ---> baz ".

+1

Vous pouvez mettre à jour votre réponse pour un dernier cas. Il cherche "commence par" pour le motif. donc en ajoutant un '^' au début du motif. Je me rends compte que c'est juste un petit point dans la réponse globale, cherchant simplement à assurer l'exhaustivité de la réponse. Mais je suis d'accord. +1 à votre solution – cepatt

+0

@cepatt Bon point, ajouté cela. –

Questions connexes