Как отфильтровать поток символов из приложения с помощью PowerShell? - PullRequest
2 голосов
/ 08 июня 2010

Вопрос PowerShell: я хочу извлечь каждую строку в символьном потоке, создаваемом приложением, которое соответствует определенному шаблону, который в псевдокоде будет выглядеть примерно так: PS> <a_ps_command> <the_application_command_for_outputting_the_text_stream> | <my_filter > output_file.txt

В моемесли приложение является CM-инструментом, который выводит историю изменений исходного файла и шаблон (psuedo) должен выглядеть примерно так: <a couple of numbers><a name><a time stamp><a line of characters>

Cheers, Christian

Ответы [ 3 ]

5 голосов
/ 09 июня 2010

Командлет фильтрации в PowerShell: Where-Object (псевдонимы Where и ?).Вы просто передаете вывод команды SCM в нее.Затем вы используете $ _ для представления текущей строки и проверки на нее, например:

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

Оператор -Match используется для сравнения текущей строки вывода с регулярным выражением.Я использую ^\d+, чтобы отфильтровать первые две строки вывода tf hist (которые являются строками форматирования), а затем я ищу текст Hack в любом месте строки (например, ищу его в комментариях).Вы бы изменили и усовершенствовали регулярное выражение в соответствии со своими потребностями.

3 голосов
/ 10 июня 2010

Как поклонник операторов, я должен добавить третий ответ:]

Вам не нужно использовать командлеты и трубопроводы.Просто используйте операторы типа -match или -like:

PS> (ipconfig) -match 'ipv6'
PS> (ipconfig) -like '*ipv*'
2 голосов
/ 09 июня 2010

Возможно, вы захотите посмотреть на Select-String. Ответ Powershell на grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...