Главная

Thursday, 14 December 2017

Фильтрация вывода в PowerShell.


Приветики.

Утренняя пробежка.

Вы знаете как фильтровать вывод в Powershell? А в Linux или Windows? Ага, сразу перед глазами Grep. А в Windows Find. А еще лучше Findstr.

Тогда по аналогии в PowerShell будет так же. Я ищу что cтоит за алиасом gsn:
Get-Alias | findstr gsn

Вывод:
Alias gsn -> Get-PSSession
Alias gsnp -> Get-PSSnapin

Если мы жить не можем без Grep то можно предварительно сделать так:
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd

И та же команда теперь получится как:
Get-Alias | grep gsn

Как еше отфильтровать вывод?

Можно ключом match:
(Get-Alias) -match 'gsn'

Можно командлетом Select-String:
Get-Alias | Select-String -Pattern gsn

Select-String весьма крут, он предоставляет следующие возможности:
• поиск по регулярным выражениям (поведение по-умолчанию),
• поиск по буквальному совпадению (переключатель -Simple),
• поиск только первого совпадения в файле, игнорируя все последующие (переключатель -List),
• или, наоборот, поиск всех совпадений, даже если в одной строке их несколько (переключатель -AllMatches),
• выполнять поиск строк, не совпадающих с шаблоном (переключатель -NotMatch) — аналог ключа -v утилиты grep,
• кроме непосредственно совпавшей строки, выводить несколько предыдущих и следующих строк (аргумент -Context) — очень похоже на то, как работает unified diff.

Что очень важно для нашего пользователя, Select-String поддерживает возможность указания кодировки файла (параметр -Encoding). Но, список кодировок ограничен юникодными кодировками, а также ANSI (WINDOWS-1251 в наших ОС) и OEM (CP866).

Все, конец пробежки.



No comments:

Post a Comment

А что вы думаете по этому поводу?