2010-06-08 1 views
2

Une question powershell: Je veux extraire chaque ligne dans un flux de caractères produit par une application qui correspond à un certain modèle qui pseudo-code serait quelque chose comme ceci: PS><a_ps_command> <the_application_command_for_outputting_the_text_stream> | <my_filter > output_file.txtComment filtrer un flux de caractères à partir d'une application utilisant PowerShell?

Dans mon cas, l'application est un outil de CM qui affiche l'historique des modifications d'un fichier source et le motif (psuedo) doit être quelque chose comme: <a couple of numbers><a name><a time stamp><a line of characters>

Cheers, Christian

Répondre

5

l'applet de commande de filtrage dans PowerShell est Where-Object (alias Where et ?). Vous lui transmettez simplement la sortie de la commande SCM. Vous utilisez ensuite $ _ pour représenter la ligne en cours et effectuer le test .: par exemple

tf hist .\Settings.StyleCop /i /stopafter:20 | Where {$_ -match '^\d+.*?Hack'} 

L'opérateur -Match est utilisé pour comparer la ligne actuelle de la production contre une expression régulière. J'utilise ^\d+ pour filtrer les deux premières lignes de sortie tf hist (qui sont des chaînes de mise en forme), puis je recherche sur le texte Hack partout ailleurs sur la ligne (en cherchant dans les commentaires par exemple). Vous souhaitez modifier et améliorer l'expression rationnelle pour répondre à vos besoins.

2

Vous pouvez regarder Select-String. La réponse de Powershell à grep.

3

En tant que fan des opérateurs, je dois ajouter la troisième réponse:]

Vous n'avez pas besoin d'utiliser et de la tuyauterie cmdlets. Il suffit d'utiliser des opérateurs comme -match ou -like:

PS> (ipconfig) -match 'ipv6' 
PS> (ipconfig) -like '*ipv*' 
Questions connexes