2017-10-04 3 views
2

Cela semble être une tâche simple, mais je ne peux pas sembler le faire fonctionner. Je veux être en mesure de lire un fichier texte et si deux modèles sont trouvés, retournez Vrai. Si seulement il en trouve un alors il renvoie faux.Retour True si deux modèles sont trouvés dans le texte avec powershell

J'ai essayé ceci et j'ai pensé que cela fonctionnait mais ce n'est pas le cas.

Get-Content $log_path | Select-String -pattern "\bInstallation of\b|\bfailed\b" -AllMatches -quiet 

Ive été la recherche depuis un certain temps maintenant et je n'ai rien trouvé qui pourrait fonctionner.

Merci

Répondre

2

Votre modèle contient une déclaration ou | qui dit essentiellement.

Si l'un ou l'autre (installation ou échec) est présent, alors c'est une correspondance. Ce que vous voulez, c'est utiliser un caractère générique à la place, donc le mot et l'entre-deux font partie de la même correspondance.

Select-String -pattern "\bInstallation .* failed\b" -quiet 

Remarques supplémentaires

Quand avoir des problèmes, il y a testeur de regex en ligne pour vous permettre de tester votre expression régulière.

Personnellement j'aime beaucoup RegexHero même si vous avez besoin d'IE parce que c'est fait dans Silverlight parce qu'il a une section Analyser pour votre expression régulière qui décompose votre expression et donne une explication en mots de ce que vous faites.

Très utile pour apprendre ou juste pour faire face à des épisodes d'épilepsie toujours plus complexes.

Par exemple, votre expression régulière initiale. Bien que je ne l'utilisais pas personnellement, RegexStorm semble également prometteur et n'est pas restreint IE.

+1

Les '-AllMatches' ne sont pas pertinents ici. –

+0

Merci beaucoup, c'était le problème. J'ai passé trop de temps là-dessus :-) Appréciez l'aide. –

+0

Bon point @MartinBrandl. Je n'ai pas recherché son effet avant de répondre. J'ai enlevé cette partie. –