Select-String
Выполняет поиск текста в строках и файлах.
Синтаксис
Select-String
[-Pattern] <String[]>
[-Path] <String[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <String>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
-InputObject <PSObject>
[-Pattern] <String[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <String>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
[-Pattern] <String[]>
-LiteralPath <String[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <String>]
[-Context <Int32[]>]
[<CommonParameters>]
Описание
Командлет Select-String
использует сопоставление регулярных выражений для поиска текстовых шаблонов в входных строках и файлах. Вы можете использовать Select-String
аналогию grep
с UNIX или findstr.exe
в Windows.
Select-String
основан на строках текста. По умолчанию Select-String
находит первое совпадение в каждой строке и для каждого совпадения отображается имя файла, номер строки и весь текст в строке, содержащей совпадение. Вы можете Select-String
найти несколько совпадений на строку, отобразить текст до и после совпадения или отобразить логическое значение (True или False), указывающее, найден ли совпадение.
Select-String
может отображать все совпадения текста или останавливаться после первого совпадения в каждом входном файле.
Select-String
можно использовать для отображения всего текста, который не соответствует указанному шаблону.
Можно также указать, что Select-String
следует ожидать определенной кодировки символов, например при поиске файлов текста Юникода. Select-String
использует метку байтового порядка (BOM) для обнаружения формата кодирования файла. Если файл не имеет BOM, предполагается, что кодировка — UTF8.
Примеры
Пример 1. Поиск соответствия с учетом регистра
В этом примере учитывается регистр текста, отправленного по конвейеру командлету Select-String
.
'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch
Текстовые строки Hello и HELLO отправляются по конвейеру командлету Select-String
.
Select-String
использует параметр Pattern для указания HELLO. Параметр CaseSensitive указывает, что регистр должен соответствовать только шаблону верхнего регистра. SimpleMatch является необязательным параметром и указывает, что строка в шаблоне не интерпретируется как регулярное выражение.
Select-String
отображает HELLO в консоли PowerShell.
Пример 2. Поиск совпадений в текстовых файлах
Эта команда выполняет поиск всех файлов с расширением .txt
имени файла в текущем каталоге. Выходные данные отображают строки в этих файлах, включающих указанную строку.
Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get-'
Alias.txt:8:Alias cat -> Get-Content
Alias.txt:28:Alias dir -> Get-ChildItem
Alias.txt:43:Alias gal -> Get-Alias
Command.txt:966:Cmdlet Get-Acl
Command.txt:967:Cmdlet Get-Alias
В этом примере Get-Alias
используется Get-Command
командлет для Out-File
создания двух текстовых файлов в текущем каталоге, Alias.txt и Command.txt.
Select-String
использует параметр Path со звездочкой (*
) для поиска всех файлов в текущем каталоге с расширением .txt
имени файла. Параметр Pattern указывает текст, соответствующий Get-. Select-String
отображает выходные данные в консоли PowerShell. Имя файла и номер строки предшествуют каждой строке содержимого, содержащей совпадение для параметра Pattern .
Пример 3. Поиск соответствия шаблона
В этом примере выполняется поиск нескольких файлов, чтобы найти совпадения для указанного шаблона. Шаблон использует квантификатор регулярных выражений. Дополнительные сведения см. в about_Regular_Expressions.
Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'
C:\Program Files\PowerShell\6\en-US\default.help.txt:27: beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50: or go to: https://go.microsoft.com/fwlink/?LinkID=210614
Командлет Select-String
использует два параметра, путь и шаблон. Параметр Path использует переменную $PSHOME
, указывающую каталог PowerShell. Оставшаяся часть пути включает подкаталог en-US и указывает каждый *.txt
файл в каталоге. Параметр Pattern указывает соответствие вопросительного знака (?
) в каждом файле. Обратная косая черта (\
) используется в качестве escape-символа и необходима, так как вопросительный знак (?
) является квантификатором регулярных выражений. Select-String
отображает выходные данные в консоли PowerShell. Имя файла и номер строки предшествуют каждой строке содержимого, содержащей совпадение для параметра Pattern .
Пример 4. Использование select-String в функции
В этом примере создается функция для поиска шаблона в файлах справки PowerShell. В этом примере функция существует только в сеансе PowerShell. При закрытии сеанса PowerShell функция удаляется. Дополнительные сведения см. в about_Functions.
function Search-Help
{
$PSHelp = "$PSHOME\en-US\*.txt"
Select-String -Path $PSHelp -Pattern 'About_'
}
Search-Help
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2: about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31: see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33: about_CommonParameters.
Функция создается в командной строке PowerShell. Команда Function
использует имя Search-Help
. Нажмите клавишу ВВОД , чтобы начать добавление инструкций в функцию. В командной строке >>
добавьте каждую инструкцию и нажмите клавишу ВВОД , как показано в примере. После добавления закрывающей скобки вы вернеесь в запрос PowerShell.
Функция содержит две команды. Переменная $PSHelp
сохраняет путь к файлам справки PowerShell. $PSHOME
— каталог установки PowerShell с подкаталогом en-US , который указывает каждый *.txt
файл в каталоге.
Команда Select-String
в функции использует параметры Path и Pattern . Параметр Path использует $PSHelp
переменную для получения пути. Параметр Pattern использует строку About_ в качестве критерия поиска.
Чтобы запустить функцию, введите Search-Help
. Команда функции Select-String
отображает выходные данные в консоли PowerShell.
Пример 5. Поиск строки в журнале событий Windows
В этом примере выполняется поиск строки в журнале событий Windows. Переменная $_
представляет текущий объект в конвейере. Дополнительные сведения см. в статье about_Automatic_Variables.
$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'
Командлет Get-WinEvent
использует параметр LogName для указания журнала приложения. Параметр MaxEvents получает из журнала 50 последних событий. Содержимое журнала хранится в переменной с именем $Events
.
Переменная $Events
отправляется по конвейеру командлету Select-String
. Select-String
использует параметр InputObject. Переменная $_
представляет текущий объект и message
является свойством события. Параметр Pattern указывает строку failed и выполняет поиск совпадений в $_.message
. Select-String
отображает выходные данные в консоли PowerShell.
Пример 6. Поиск строки в подкаталогах
В этом примере выполняется поиск каталога и всех его подкаталогов для определенной текстовой строки.
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive
Get-ChildItem
использует параметр Path для указания C:\Windows\System32*.txt. Параметр Recurse включает вложенные каталоги. Объекты отправляются вниз конвейера Select-String
.
Select-String
использует параметр Pattern и задает строку Майкрософт. Параметр CaseSensitive используется для сопоставления точного случая строки. Select-String
отображает выходные данные в консоли PowerShell.
Примечание.
В зависимости от ваших разрешений в выходных данных могут отображаться сообщения, отказано в доступе.
Пример 7. Поиск строк, которые не соответствуют шаблону
В этом примере показано, как исключить строки данных, которые не соответствуют шаблону.
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set' -NotMatch
Командлет Get-Command
отправляет объекты вниз конвейера Out-File
, чтобы создать файл Command.txt в текущем каталоге. Select-String
использует параметр Path для указания файла Command.txt. Параметр Pattern указывает Get и Set в качестве шаблона поиска. Параметр NotMatch исключает Get и Set из результатов.
Select-String
отображает выходные данные в консоли PowerShell, которая не включает get или Set.
Пример 8. Поиск строк до и после совпадения
В этом примере показано, как получить строки до и после соответствующего шаблона.
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3
Command.txt:1186:Cmdlet Get-CmsMessage 3.0.0.0 Microsoft.PowerShell.Security
Command.txt:1187:Cmdlet Get-Command 3.0.0.0 Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet Get-ComputerRestorePoint 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1190:Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1191:Cmdlet Get-ControlPanelItem 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1192:Cmdlet Get-Counter 3.0.0.0 Microsoft.PowerShell.Diagnostics
Командлет Get-Command
отправляет объекты вниз конвейера Out-File
, чтобы создать файл Command.txt в текущем каталоге. Select-String
использует параметр Path для указания файла Command.txt. Параметр Pattern указывает Get-Computer
в качестве шаблона поиска. Параметр Context использует два значения, до и после, а также помечает шаблоны в выходных данных с угловой скобкой (>
). Параметр Context выводит две строки перед первым совпадением шаблона и тремя строками после последнего сопоставления шаблона.
Пример 9. Поиск всех совпадений шаблонов
В этом примере показано, как параметр AllMatches находит каждое совпадение шаблона в строке текста. По умолчанию Select-String
находит только первое вхождение шаблона в строке текста. В этом примере используются свойства объектов, найденные с помощью командлета Get-Member
.
$A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
$A
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5: Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9: Windows PowerShell Workflow adds the activity common
$A.Matches
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 4
Length : 10
Value : PowerShell
$A.Matches.Length
2073
$B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
$B.Matches.Length
2200
Командлет Get-ChildItem
использует параметр Path . Параметр Path использует переменную $PSHOME
, указывающую каталог PowerShell. Оставшаяся часть пути включает подкаталог en-US и указывает каждый *.txt
файл в каталоге. Объекты Get-ChildItem
хранятся в переменной $A
. Переменная $A
отправляется по конвейеру командлету Select-String
. Select-String
использует параметр Pattern для поиска каждого файла строки PowerShell.
В командной строке PowerShell отображаются содержимое $A
переменной. Существует строка, содержащая два вхождения строки PowerShell.
Свойство $A.Matches
перечисляет первое вхождение шаблона PowerShell в каждой строке.
Свойство $A.Matches.Length
подсчитывает первое вхождение шаблона PowerShell в каждой строке.
Переменная $B
использует те же Get-ChildItem
и Select-String
командлеты, но добавляет параметр AllMatches . AllMatches находит каждое вхождение шаблона PowerShell в каждой строке. Объекты, хранящиеся в $A
переменных, $B
идентичны.
Свойство $B.Matches.Length
увеличивается, так как для каждой строки учитывается каждое вхождение шаблона PowerShell .
Пример 10. Преобразование объектов конвейера в строки с помощью Out-String
Результат ToString()
конвейерного объекта не совпадает с форматированным строковым представлением, созданным системой форматирования PowerShell. Таким образом, сначала может потребоваться передать объекты Out-String
.
Пилинг для Out-String
преобразования форматированных выходных данных в один многострочный строковый объект. Это означает, что при Select-String
поиске совпадения он выводит всю многостроную строку.
PS> $hash = @{
Name = 'foo'
Category = 'bar'
}
# !! NO output, due to .ToString() conversion
$hash | Select-String -Pattern 'foo'
# Out-String converts the output to a single multi-line string object
PS> $hash | Out-String | Select-String -Pattern 'foo'
Name Value
---- -----
Name foo
Category bar
# Out-String -Stream converts the output to a multiple single-line string objects
PS> $hash | Out-String -Stream | Select-String -Pattern 'foo'
Name foo
Пилинг для Out-String -Stream
преобразования отформатированных выходных данных в несколько однострочных строковых объектов. Это означает, что при Select-String
поиске совпадения он выводит только соответствующую строку.
Параметры
-AllMatches
Указывает, что командлет ищет несколько совпадений в каждой строке текста. Без этого параметра находит Select-String
только первое совпадение в каждой строке текста.
При Select-String
поиске нескольких совпадений в строке текста он по-прежнему выдает только один объект MatchInfo для строки, но свойство Match объекта содержит все совпадения.
Примечание.
Этот параметр игнорируется при использовании в сочетании с параметром SimpleMatch . Если вы хотите вернуть все совпадения и шаблон, который вы ищете, содержит символы регулярных выражений, необходимо экранировать эти символы, а не использовать SimpleMatch. Дополнительные сведения о побеге регулярных выражений см . в about_Regular_Expressions .
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-CaseSensitive
Указывает, что совпадения командлета учитывает регистр. По умолчанию совпадения не учитывает регистр.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Context
Записывает указанное количество строк до и после строки, которая соответствует шаблону.
Если в качестве значения этого параметра вы введете одно число, оно будет определять количество записываемых строк до и после совпадения. Если вы укажете два числа, первое из них будет определять количество строк до совпадения, а второе — после совпадения. Например, -Context 2,3
.
В отображении по умолчанию строки со совпадением указываются правой угловой скобкой () (>
ASCII 62) в первом столбце дисплея. Строки без пометок формируют контекст.
Параметр Context не изменяет количество объектов, создаваемых с помощью Select-String
.
Select-String
создает один объект MatchInfo для каждого совпадения. Контекст хранится в виде массива строк в свойстве Context объекта.
Когда выходные данные Select-String
команды отправляются по конвейеру другой Select-String
команде, получение команды выполняет поиск только текста в соответствующей строке. Соответствующая строка — это значение свойства Line объекта MatchInfo, а не текста в строках контекста. В результате параметр Context недействителен в принимающей Select-String
команде.
Если контекст включает совпадение, объект MatchInfo для каждого совпадения включает все строки контекста, но перекрывающиеся линии отображаются только один раз в отображении.
Тип: | Int32[] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Encoding
Указывает тип кодировки для целевого файла. Значение по умолчанию — default
.
Допустимые значения для этого параметра приведены следующим образом:
ascii
Использует набор символов ASCII (7-разрядный).bigendianunicode
Использует UTF-16 с порядком байтов больших байтов.default
Использует кодировку, соответствующую активной кодовой странице системы (обычно ANSI).oem
Использует кодировку, соответствующую текущей кодовой странице OEM системы.unicode
Использует UTF-16 с маленьким порядком байтов.utf7
Использует UTF-7.utf8
Использует UTF-8.utf32
Использует UTF-32 с маленьким порядком байтов.
Тип: | String |
Допустимые значения: | ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32 |
Position: | Named |
Default value: | Default |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Exclude
Исключает указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt
. Разрешено использовать подстановочные знаки.
Тип: | String[] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | True |
-Include
Включает указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt
. Разрешено использовать подстановочные знаки.
Тип: | String[] |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | True |
-InputObject
Задает текст для поиска. Укажите переменную, содержащую текст, либо введите команду или выражение, которые его возвращают.
Использование параметра InputObject не совпадает с отправкой строк вниз конвейераSelect-String
.
При отправке нескольких строк Select-String
командлету выполняется поиск указанного текста в каждой строке и возвращается каждая строка, содержащая текст поиска.
При использовании параметра InputObject для отправки коллекции строк Select-String
коллекция обрабатывает коллекцию как одну объединенную строку. Select-String
возвращает строки в виде единицы, если он находит текст поиска в любой строке.
Тип: | PSObject |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-List
Возвращается только первый экземпляр соответствующего текста из каждого входного файла. Это самый эффективный способ получить список файлов, которые имеют содержимое, соответствующее регулярному выражению.
По умолчанию возвращает объект MatchInfo для каждого найденного совпаденияSelect-String
.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-LiteralPath
Указывает путь к файлам для поиска. Значение параметра LiteralPath используется точно так же, как он типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности. Дополнительные сведения см. в about_Quoting_Rules.
Тип: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-NotMatch
Параметр NotMatch находит текст, который не соответствует указанному шаблону.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает путь к файлам для поиска. Разрешено использовать подстановочные знаки. По умолчанию поиск выполняется в локальном каталоге.
Укажите файлы в каталоге, например log1.txt
, *.doc
или *.*
. Если вы укажете только один каталог, команда завершится сбоем.
Тип: | String[] |
Position: | 1 |
Default value: | Local directory |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-Pattern
Указывает текст, который нужно найти в каждой строке. Значение шаблона рассматривается как регулярное выражение.
Дополнительные сведения о регулярных выражениях см. в about_Regular_Expressions.
Тип: | String[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Quiet
Указывает, что командлет возвращает простой ответ вместо объекта MatchInfo . Возвращаемое значение — если $true
шаблон найден или $null
если шаблон не найден.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SimpleMatch
Указывает, что командлет использует простое совпадение, а не совпадение регулярного выражения. В простом совпадении Select-String
выполняется поиск входных данных для текста в параметре Pattern . Он не интерпретирует значение параметра Pattern как инструкцию регулярного выражения.
Кроме того, когда используется SimpleMatch, свойство Match объекта MatchInfo возвращается пусто.
Примечание.
Если этот параметр используется с параметром AllMatches, allMatches игнорируется.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Вы можете передать любой объект с методом ToString()
в этот командлет.
Выходные данные
По умолчанию этот командлет возвращает объект MatchInfo для каждого найденного совпадения.
При использовании параметра Quiet этот командлет возвращает логическое значение, указывающее, найден ли шаблон.
Примечания
Windows PowerShell включает следующие псевдонимы для Select-String
:
sls
Select-String
аналогичен grep
unix или findstr.exe
в Windows.
Примечание.
Согласно утвержденным командам PowerShell, официальный префикс псевдонима для Select-*
командлетов не sl
являетсяsc
. Таким образом, правильный псевдоним Select-String
должен быть scs
, а не sls
. Это исключение для этого правила.
При отправке объектов в Select-String
:
- Объекты FileInfo рассматриваются как путь к файлу. Если указаны пути к файлам,
Select-String
выполняется поиск содержимого файла, а неToString()
представление объекта. - Результат
ToString()
конвейерного объекта не совпадает с форматированным строковым представлением, созданным системой форматирования PowerShell. Таким образом, сначала может потребоваться передать объектыOut-String
. Дополнительные сведения см. в примере 10.
Чтобы использовать Select-String
, введите текст, который требуется найти в качестве значения параметра Pattern . Чтобы указать текст для поиска, используйте следующие критерии:
- Введите текст в строке с кавычками, а затем переведите его
Select-String
в . - Сохраните текстовую строку в переменной, а затем укажите переменную в качестве значения параметра InputObject .
- Если текст хранится в файлах, используйте параметр Path , чтобы указать путь к файлам.
По умолчанию Select-String
значение параметра Pattern интерпретируется как регулярное выражение. Дополнительные сведения см. в about_Regular_Expressions. Параметр SimpleMatch можно использовать для переопределения сопоставления регулярных выражений. Параметр SimpleMatch находит экземпляры значения параметра Pattern в входных данных.
Выходные данные Select-String
по умолчанию — это объект MatchInfo , содержащий подробные сведения о совпадениях. Сведения в объекте полезны при поиске текста в файлах, так как объекты MatchInfo имеют такие свойства, как имя файла и строка. Если входные данные не из файла, значение этих параметров — InputStream.
Если вам не нужны сведения в объекте MatchInfo , используйте параметр Quiet . Параметр Quiet возвращает логическое значение (True или False), указывающее, найден ли он совпадение вместо объекта MatchInfo .
При сопоставлении Select-String
фраз использует текущий язык и региональные параметры, заданные для системы. Чтобы найти текущий язык и региональные Get-Culture
параметры, используйте командлет.
Чтобы найти свойства объекта MatchInfo , введите следующую команду:
Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *
Связанные ссылки
PowerShell