Поиск по сайту:

Как grep найти текст из PowerShell


grep – это мощная утилита для поиска текста в Linux, но она недоступна в Windows. Хотя существуют сторонние порты и решения, PowerShell предлагает встроенные эквиваленты grep , которые будут выполнять ту же работу в ваших скриптах.

Использование findstr для поиска grep в PowerShell

В PowerShell есть несколько различных поисковых утилит, каждая из которых имеет свои сильные стороны. Самым простым является findstr, который представляет собой собственный исполняемый файл Windows. Это хорошо работает, чтобы заменить grep для простых операций поиска в командной строке. Например, вы можете направить в него выходные данные ls, чтобы найти совпадения.

ls | findstr "foo"

Вы также можете выполнять поиск по нескольким словам одновременно, использовать подстановочные знаки для соответствия чему угодно и использовать флаг /R для передачи основных регулярных выражений.

ls | findstr /R ba[a-z]\.txt

Однако, если вы хотите явно искать, включая пробел, вам нужно будет использовать флаг /C: :

ls | findstr /C:"foo"

Если вы привыкли к командной строке Linux и не хотите запоминать новую команду, вы можете настроить «grep» как псевдоним для findstr, что позволит вам сохранить свою мышечную память. .

new-alias grep findstr

Использование Select-String для поиска grep в PowerShell

Другой собственный метод, предлагаемый PowerShell, — это командлет Select-String, который во многом похож на findstr, но представляет собой командлет PowerShell, а не исполняемый файл Windows.

Это означает, что он будет лучше работать в сценариях PowerShell и, что особенно важно, будет возвращать выходные данные в виде объекта, который PowerShell может красиво напечатать. Его также проще использовать в командной строке, так как завершение вкладок PowerShell будет работать с ним.

Он работает так же, как findstr, а также может принимать подстановочные знаки и регулярные выражения.

ls | Select-String foo
ls | Select-String -Pattern <regexPattern>

Вы можете использовать Select-String для поиска текста внутри файлов, передав ему аргумент -Path. Вы также можете использовать его с входными данными, переданными из других командлетов, таких как Get-Content.

Select-String -Path ".\foo.txt" -Pattern ba.*

Если вы хотите использовать его в командной строке, вы также можете использовать псевдоним «grep» для быстрого доступа.

remove-alias grep
new-alias grep Select-String