Находит текст в строках и файлах.

Синтаксис

Select-String [-Path] <string[]> [-Шаблон] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Кодирование <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Кодирование <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

Описание

Командлет Select-String осуществляет поиск текста и текстовых шаблонов во входных строках и файлах. Его можно использовать, как команду Grep в UNIX и Findstr в Windows.

Работа командлета Select-String основана на текстовых строках. По умолчанию Select-String находит первое совпадение в каждой строке и отображает для каждого совпадения имя файла, номер строки и полный текст найденной строки.

Однако можно сделать так, чтобы командлет искал несколько совпадений в строке, выводил текст до и после совпадения или выводил только логическое значение (true или false), указывающее, было ли найдено совпадение.

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

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

Можно также установить для командлета Select-String конкретную кодировку, например при поиске по файлам в кодировке Юникод.

Параметры

-AllMatches

Выполняет поиск более одного совпадения в каждой из текстовых строк. Без этого параметра командлет Select-String находит только первое совпадение в каждой из текстовых строк.

Найдя в текстовой строке несколько совпадений, Select-String все равно возвращает для нее только один объект MatchInfo, однако свойство Matches для этой строки содержит все совпадения.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-CaseSensitive

Сопоставление учитывает регистр. По умолчанию сопоставление выполняется без учета регистра.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Context <Int32[]>

Записывает заданное число строк до и после строки с совпадением. Это позволяет видеть совпадение в контексте.

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

По умолчанию строки с совпадением помечаются правой угловой скобкой (код ASCII 62) в первом отображаемом столбце. Непомеченные строки формируют контекст.

Этот параметр не изменяет числа объектов, создаваемых командлетом Select-String. Select-String создает один объект MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) для каждого совпадения. Контекст сохраняется в массиве строк в свойстве Context объекта.

При передаче результата выполнения команды Select-String другой команде Select-String по конвейеру принимающая команда ищет текст только в строке с совпадением (значении свойства Line объекта MatchInfo), но не в тексте строк контекста. В результате параметр Context не учитывается принимающей командой Select-String.

Если контекст включает совпадение, то объект MatchInfo для каждого совпадения включает все строки контекста, общие строки выводятся на экран только один раз.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Кодирование <string>

Задает предположительную кодировку файла, по которому должен осуществляться поиск с помощью командлета Select-String. По умолчанию используется значение UTF8.

Допустимые значения: "UTF7", "UTF8", "UTF32", "ASCII", "Unicode", "BigEndianUnicode", "Default" и "OEM". Значение Default соответствует кодировке текущей системной кодовой страницы ANSI. OEM соответствует идентификатору кодовой страницы текущего изготовителя оборудования для операционной системы.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Exclude <string[]>

Исключает указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например "*.txt". Подстановочные знаки разрешены.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Include <string[]>

Включает только указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например "*.txt". Подстановочные знаки разрешены.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-InputObject <psobject>

Задает текст для поиска. Укажите переменную, содержащую текст, либо введите команду или выражение, получающие его.

Обязательно?

true

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue)

Принимать подстановочные знаки?

false

-List

Возвращает только первое совпадение для каждого из входных файлов. По умолчанию командлет Select-String возвращает объект MatchInfo для каждого найденного совпадения.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-NotMatch

Находит текст, который не соответствует заданному шаблону.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Path <string[]>

Задает путь к файлам для поиска. Подстановочные знаки разрешены. Местоположением по умолчанию является локальный каталог.

Укажите файлы в каталоге, например "log1.txt", "*.doc" или "*.*". Если указать только каталог, команда завершится сбоем.

Обязательно?

true

Позиция?

2

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Pattern <string[]>

Задает текста для поиска. Введите строку или регулярное выражение. Если введена строка, используйте параметр SimpleMatch.

Дополнительные сведения о регулярных выражениях см. about_Regular_Expressions.

Обязательно?

true

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Quiet

Возвращает логическое значение (true или false) вместо объекта MatchInfo. Значение будет равно "true", если найдено соответствие шаблону, в противном случае — "false".

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-SimpleMatch

Вместо сопоставления по регулярному выражению будет использоваться простое сопоставление. При простом сопоставлении командлет Select-String ищет во входных данных текст, указанный в параметре Pattern. Он не интерпретирует значение параметра Pattern в качестве регулярного выражения.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

System.Management.Automation.PSObject

Любой объект, содержащий метод ToString, можно передать командлету Select-String по конвейеру.

Выходные данные

Microsoft.PowerShell.Commands.MatchInfo or System.Boolean

По умолчанию вывод состоит из объектов MatchInfo — по одному на каждое совпадение. При использовании параметра Quiet возвращается логическое значение, указывающее, найден ли шаблон.

Примечания

Командлет Select-String похож на команду Grep в UNIX и FindStr в Windows.

Для использования командлета Select-String в качестве значения параметра Pattern необходимо ввести текст, который требуется найти.

Для задания текста для поиска выполните следующее.

-- Введите текст в виде заключенной в кавычки строки и передайте его командлету Select-String по конвейеру.

-- Сохраните текстовую строку в переменной и укажите эту переменную в качестве значения параметра InputObject.

-- Если текст хранится в файлах, укажите путь к этим файлам с помощью параметра Path.

По умолчанию командлет Select-String интерпретирует значение параметра Pattern в качестве регулярного выражения. (Дополнительные сведения см. about_Regular_Expressions.) Однако с помощью параметра SimpleMatch можно отключить сопоставление с использованием регулярных выражений. Параметр SimpleMatch ищет во входных данных экземпляры значения параметра Pattern.

По умолчанию выводом командлета Select-String является объект MatchInfo, который включает подробные сведения о совпадениях. Сведения, которые содержатся в этом объекте, бывают полезными при поиске текста в файлах, поскольку у объекта MatchInfo имеются такие свойства, как Filename и Line. Если входные данные не являются файлом, эти параметры имеют значение InputStream.

Если выводить сведения, содержащиеся в объекте MatchInfo, не требуется, можно использовать параметр Quiet, возвращающий значение типа Boolean (true или false), которое вместо объекта MatchInfo показывает, было ли найдено совпадение.

При сопоставлении фраз командлет Select-String использует текущую, заданную для системы. Чтобы определить текущие региональные параметры, используйте командлет Get-Culture.

Чтобы просмотреть все свойства объекта MatchInfo, введите команду:

select-string -path test.txt -pattern "test" | Get-Member | Format-List -property *

Пример 1

C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive

Описание
-----------
Эта команда выполняет поиск с учетом регистра в тексте, переданном в команду Select-String по конвейеру. 

В результате Select-String находит только строку "HELLO", поскольку "Hello" не является совпадением.

Поскольку каждый из заключенных в кавычки фрагментов считается отдельной строкой, без параметра -CaseSensitive командлет Select-String распознал бы в качестве совпадений оба фрагмента.






Пример 2

C:\PS>select-string -path *.xml -pattern "the the"

Описание
-----------
Эта команда ищет во всех XML-файлах в текущем каталоге строки, включающие слова "the the", и отображает их.






Пример 3

C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@"

Описание
-----------
Эта команда ищет в файлах концептуальной справки Windows PowerShell (about_*.txt) сведения об использовании символа (@). 

Для указания пути в этой команде используется значение автоматической переменной $pshome, в которой хранится путь к каталогу установки Windows PowerShell. В данном примере команда осуществляет поиск по каталогу en-US, в котором содержатся файлы справки Windows PowerShell на английском (США) языке.






Пример 4

C:\PS>function search-help
{
	$pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml"
	select-string -path $pshelp -pattern $args[0]
}

Описание
-----------
Эта простая функция использует командлет Select-String для поиска заданной строки в файлах справки Windows PowerShell. В данном примере функция осуществляет поиск по каталогу en-US, в котором содержатся файлы справки на английском (США) языке.

Чтобы найти с помощью этой функции строку, например "psdrive", введите "search-help psdrive".

Чтобы использовать эту функцию в произвольной консоли Windows PowerShell, замените путь на расположение файлов справки Windows PowerShell в конкретной системе, а затем скопируйте функцию в профиль Windows PowerShell.






Пример 5

C:\PS>$events = get-eventlog -logname application -newest 100

C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed"

Описание
-----------
В этом примере осуществляется поиск строки "failed" в 100 последних событиях журнала "Приложение" средства "Просмотр событий".

Первая команда с помощью командлета Get-EventLog получает 100 последних записей из журнала событий "Приложение". После этого она сохраняет события в переменной $events. 

Вторая команда с помощью оператора конвейера (|) передает объекты из переменной $events в командлет Select-String. Для представления входных данных в переменной $events она использует параметр InputObject. Значение параметра InputObject равно значению свойства Message каждого передаваемого по конвейеру объекта. Текущий объект представляется символом $_.

Когда событие поступает в конвейер, командлет Select-String ищет строку "failed" в свойстве Message этого события и отображает строки, содержащие совпадение.






Пример 6

C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse |
select-string -pattern "Microsoft" -casesensitive

Описание
-----------
Эта команда ищет во всех TXT-файлах, хранящихся в подкаталогах каталога C:\Windows\System32, строку "Microsoft". Параметр CaseSensitive указывает, что буква "M" в слове "Microsoft" должна быть прописной, а остальные буквы — строчными, чтобы командлет Select-String обнаружил совпадение.






Пример 7

C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch

Описание
-----------
Эта команда находит в файле Process.txt строки, не содержащие слов "idle" и "svchost".






Пример 8

C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 3

C:\PS> $f.count

C:\PS> ($f)[0].context | format-list

Описание
-----------
Первая команда ищет в файле Audit.Log фразу "logon failed". Она использует параметр Context, чтобы вывести 2 строки до совпадения и 3 строки после него. 

Вторая команда использует свойство Count массивов объектов для отображения количества найденных совпадений (в данном случае оно равно 2). 

Третья команда отображает строки, хранящиеся в свойстве Context объекта MatchInfo. Для указания первого совпадения (0 в массиве с отсчетом от нуля) используются квадратные скобки, а для отображения значения свойства Context в виде списка — командлет Format-List.

Вывод состоит из двух объектов MatchInfo — по одному на каждое совпадение. Строки контекста сохраняются в свойстве Context объекта MatchInfo.






Пример 9

C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript


C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript -allmatches

C:\PS> $a
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:	 Start-Transcript and Stop-Transcript.

C:\PS> $b
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:	 Start-Transcript and Stop-Transcript.


C:\PS>> $a.matches
Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index	: 13
Length   : 10
Value	: Transcript


C:\PS> $b.matches
Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index	: 13
Length   : 10
Value	: Transcript

Groups   : {Transcript}
Success  : True
Captures : {Transcript}
Index	: 33
Length   : 10
Value	: Transcript

Описание
-----------
В этом примере показано действие параметра AllMatches командлета Select-String. Параметр AllMatches позволяет находить все совпадения в строке, а не по одному совпадению.

Первая команда в этом примере ищет вхождения слова "transcript" в файлах концептуальной справки Windows PowerShell (справка "about"). Вторая команда идентична первой за исключением того, что в ней используется параметр AllMatches.

Вывод первой команды сохраняется в переменной $a. Вывод второй команды сохраняется в переменной $b. 

При выводе значений переменных по умолчанию они отображаются одинаково, как показано в примере вывода.

Однако пятая и шестая команда отображают значение свойства Matches каждого из объектов. Свойство Matches для первой команды содержит только одно совпадение (т. е. один объект System.Text.RegularExpressions.Match), в то время как свойство Matches второй команды содержит объекты для обоих совпадений в строке.






См. также