Как 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