2010-10-15 12 views
2

Je suis en train de exctract lignes d'erreur de mon fichier journal:Essayer de passer l'expression régulière à grep

je ceci:

more report.txt | grep -E (?i)(error) 

Je reçois cette erreur msg:

bash: syntax error near unexpected token `(' 

Qu'est-ce que je fais mal? Je suis en train d'extraire toutes les lignes contenant « erreur » en ignorant la sensibilité de cas il peut donc être erreur, erreur, erreur, etc.

Répondre

3

Vous pouvez faire:

grep -i error report.txt 

Il n'y a vraiment pas besoin de more le fichier, puis le tuyau à grep. Vous pouvez passer le nom de fichier en tant qu'argument à grep.

Pour rendre le cas de recherche insensible, utilisez l'option -i de grep.

Et il n'y a vraiment pas besoin d'opter pour l'option -E car le modèle que vous utilisez error n'est pas une expression rationnelle étendue.

La cause de l'erreur que vous voyez est que votre modèle (?i)(error) est interprété par la coquille et puisque la coquille n'a pas, sauf pour voir ( dans ce contexte, il renvoie une erreur, quelque chose de semblable quand vous faites ls (*).

Pour corriger cela, vous citez votre schéma. Mais cela ne résoudra pas votre problème de trouver error dans le fichier parce que le modèle (?i)(error) cherche la chaîne 'ierror' !!

1

vous pouvez utiliser

grep -i error report.txt 
0

cela obtenir le même résultat

cat report.txt | grep -i error 

et si vous voulez paginer les résultats:

cat report.txt | grep -i error | more 
+0

ceci est une utilisation inutile de cat: grep -i error report.txt | plus fait la même chose :-) – WMR

4

Le problème avec votre ligne est que les parens sont repris par le shell au lieu de grep, vous devez les citer:

grep -E '(?i)(error)' report.txt 

Pour cette tâche particulière l'autre les réponses sont bien sûr correctes, vous n'avez même pas besoin des parens.