Select-String
查找字符串和文件中的文本。
语法
File (默认值)
Select-String
[-Pattern] <String[]>
[-Path] <String[]>
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
ObjectRaw
Select-String
[-Pattern] <String[]>
-InputObject <PSObject>
-Raw
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
Object
Select-String
[-Pattern] <String[]>
-InputObject <PSObject>
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
FileRaw
Select-String
[-Pattern] <String[]>
[-Path] <String[]>
-Raw
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
LiteralFileRaw
Select-String
[-Pattern] <String[]>
-LiteralPath <String[]>
-Raw
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
LiteralFile
Select-String
[-Pattern] <String[]>
-LiteralPath <String[]>
[-Culture <String>]
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-NoEmphasis]
[-Include <String[]>]
[-Exclude <String[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <Encoding>]
[-Context <Int32[]>]
[<CommonParameters>]
说明
Select-String
cmdlet 使用正则表达式匹配来搜索输入字符串和文件中的文本模式。 可以使用类似于 Unix 中的 Select-String
或 Windows 中的 grep
findstr.exe
。
Select-String
基于文本行。 默认情况下,Select-String
在每个行中查找第一个匹配项,并且对于每个匹配项,它显示包含匹配项的行中的文件名、行号和所有文本。 可以指示 Select-String
查找每行的多个匹配项、在匹配前后显示文本,或显示指示是否找到匹配项的布尔值(True 或 False)。
Select-String
可以在每个输入文件中的第一个匹配项之后显示所有文本匹配项或停止。
Select-String
可用于显示与指定模式不匹配的所有文本。
还可以指定 Select-String
应需要特定的字符编码,例如在搜索 Unicode 文本的文件时。
Select-String
使用字节顺序标记(BOM)来检测文件的编码格式。 如果文件没有 BOM,则假定编码为 UTF8。
示例
示例 1:查找区分大小写的匹配项
此示例对将管道发送到 Select-String
cmdlet 的文本执行区分大小写的匹配。
'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch
Hello 和 HELLO 的文本字符串将向下发送到 Select-String
cmdlet。
Select-String
使用 Pattern 参数来指定 HELLO。
CaseSensitive 参数指定大小写必须仅匹配大写模式。
SimpleMatch 是一个可选参数,指定模式中的字符串不会解释为正则表达式。
Select-String
PowerShell 控制台中显示 HELLO。
示例 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
cmdlet 一起使用,在当前目录中创建两个文本文件,Alias.txt 和 Command.txt。
Select-String
使用带星号()通配符的 *
参数搜索当前目录中具有文件扩展名 .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
cmdlet 使用两个参数:Path 和 Pattern。
Path 参数使用指定 PowerShell 目录的变量 $PSHOME
。 路径的其余部分包括子目录 en-US,并指定目录中的每个 *.txt
文件。
Pattern 参数指定在每个文件中匹配问号(?
)。 反斜杠(\
)用作转义字符,这是必要的,因为问号(?
)是正则表达式限定符。
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:\Program Files\PowerShell\7\en-US\default.help.txt:67: The titles of conceptual topics begin with "About_".
C:\Program Files\PowerShell\7\en-US\default.help.txt:70: Get-Help About_<topic-name>
C:\Program Files\PowerShell\7\en-US\default.help.txt:93: Get-Help About_Modules : Displays help about PowerShell modules.
C:\Program Files\PowerShell\7\en-US\default.help.txt:97: about_Updatable_Help
该函数在 PowerShell 命令行上创建。
function
关键字使用名称 Search-Help
。 按 Enter 开始向函数添加语句。 在 >>
提示符下,添加每个语句,然后按 Enter,如示例中所示。 添加右括号后,将返回到 PowerShell 提示符。
该函数包含两个命令。
$PSHelp
变量存储 PowerShell 帮助文件的路径。
$PSHOME
是 PowerShell 安装目录,其中包含指定目录中每个 文件的子目录 *.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
cmdlet 使用 LogName 参数来指定应用程序日志。
MaxEvents 参数从日志中获取 50 个最新事件。 日志内容存储在名为 $Events
的变量中。
$Events
变量将管道向下发送到 Select-String
cmdlet。
Select-String
使用 InputObject 参数。
$_
变量表示当前对象,Message
是事件的一个属性。
Pattern 参数指定字符串 失败 并在 $_.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 参数,并指定字符串 Microsoft。
CaseSensitive 参数用于匹配字符串的确切大小写。
Select-String
PowerShell 控制台中显示输出。
注释
根据你的权限,你可能会在输出中看到 拒绝访问 消息。
示例 7:查找与模式不匹配的字符串
此示例演示如何排除与模式不匹配的数据行。
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set' -NotMatch
Get-Command
cmdlet 将对象向下发送到 Out-File
,以在当前目录中创建 Command.txt 文件。
Select-String
使用 Path 参数指定 Command.txt 文件。
Pattern 参数将 获取 和 设置为搜索模式。
NotMatch 参数从结果中排除 获取 和 集。
Select-String
在 PowerShell 控制台中显示不包含 获取 或 设置的输出。
示例 8:查找匹配前后的行
此示例演示如何在匹配模式前后获取行。
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3
Command.txt:986:Cmdlet Get-CmsMessage 6.1.0.0 Microsoft.PowerShell.Security
Command.txt:987:Cmdlet Get-Command 6.1.2.0 Microsoft.PowerShell.Core
> Command.txt:988:Cmdlet Get-ComputerInfo 6.1.0.0 Microsoft.PowerShell.Management
Command.txt:990:Cmdlet Get-Content 6.1.0.0 Microsoft.PowerShell.Management
Command.txt:991:Cmdlet Get-ControlPanelItem 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:992:Cmdlet Get-Credential 6.1.0.0 Microsoft.PowerShell.Security
Get-Command
cmdlet 将对象向下发送到 Out-File
,以在当前目录中创建 Command.txt 文件。
Select-String
使用 Path 参数指定 Command.txt 文件。
Pattern 参数将 Get-Computer
指定为搜索模式。
Context 参数使用两个值,前后使用尖括号(>
)标记输出中的模式匹配项。
Context 参数输出第一个模式匹配之前的两行,最后一个模式匹配后的三行。
示例 9:查找所有模式匹配项
此示例演示如何 AllMatches 参数查找文本行中的每个模式匹配项。 默认情况下,Select-String
仅在文本行中找到模式的第一个匹配项。 此示例使用通过 Get-Member
cmdlet 找到的对象属性。
$A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
$A
C:\Program Files\PowerShell\7\en-US\default.help.txt:3: PowerShell Help System
C:\Program Files\PowerShell\7\en-US\default.help.txt:6: Displays help about PowerShell cmdlets and concepts.
C:\Program Files\PowerShell\7\en-US\default.help.txt:9: PowerShell Help describes PowerShell cmdlets
$A.Matches
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 4
Length : 10
Value : PowerShell
$A.Matches.Length
8
$B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
$B.Matches.Length
9
Get-ChildItem
cmdlet 使用 Path 参数。
Path 参数使用指定 PowerShell 目录的变量 $PSHOME
。 路径的其余部分包括子目录 en-US,并指定目录中的每个 *.txt
文件。
Get-ChildItem
对象存储在 $A
变量中。
$A
变量将管道向下发送到 Select-String
cmdlet。
Select-String
使用 Pattern 参数在 PowerShell 搜索字符串的每个文件。
从 PowerShell 命令行显示 $A
变量内容。 有一行包含两个字符串的匹配项,PowerShell。
$A.Matches
属性列出了每个行上第一个模式 PowerShell 匹配项。
$A.Matches.Length
属性计算每行上第一个模式 PowerShell 匹配项。
$B
变量使用相同的 Get-ChildItem
和 Select-String
cmdlet,但添加 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
指示 cmdlet 在每行文本中搜索多个匹配项。 如果没有此参数,Select-String
仅查找每行文本中的第一个匹配项。
当 Select-String
在文本行中查找多个匹配项时,它仍然只为该行发出一个 MatchInfo 对象,但该对象的 Matchs 属性包含所有匹配项。
注释
与 SimpleMatch 参数结合使用时,将忽略此参数。 如果要返回所有匹配项和要搜索的模式包含正则表达式字符,则必须转义这些字符,而不是使用 simpleMatch 。 有关转义正则表达式的详细信息,请参阅 about_Regular_Expressions。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-CaseSensitive
指示 cmdlet 匹配项区分大小写。 默认情况下,匹配项不区分大小写。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Context
捕获与模式匹配的行前后的指定行数。
如果输入一个数字作为此参数的值,该数字将确定匹配前后捕获的行数。 如果输入两个数字作为值,则第一个数字确定匹配前的行数,第二个数字确定匹配后的行数。 例如,-Context 2,3
。
在默认显示中,具有匹配项的行由显示的第一列中的右尖括号(>
)(ASCII 62)指示。 未标记的行是上下文。
Context 参数不会更改 Select-String
生成的对象数。
Select-String
为每个匹配生成一个 MatchInfo 对象。 上下文作为字符串数组存储在对象的 Context 属性中。
将 Select-String
命令的输出向下发送到另一个 Select-String
命令时,接收命令仅搜索匹配行中的文本。 匹配行是 MatchInfo 对象的 Line 属性的值,而不是上下文行中的文本。 因此,接收 命令上 Select-String
参数无效。
当上下文包含匹配项时,每个匹配项的 MatchInfo 对象包括所有上下文行,但重叠的行仅在显示中显示一次。
参数属性
类型: | Int32[] |
默认值: | None |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Culture
指定与指定模式匹配的区域性名称。 Culture 参数必须与 SimpleMatch 参数一起使用。 默认行为使用当前 PowerShell 运行空间(会话)的区域性。
若要获取所有受支持的区域性的列表,请使用 Get-Culture -ListAvailable
命令。
此外,此参数接受下列参数:
- CurrentCulture,即默认值;
- 序号,即非语言二进制比较;
- 固定的,即区域性独立比较。
使用 Select-String -Culture Ordinal -CaseSensitive -SimpleMatch
命令,可以获得最快的二进制比较。
Culture 参数使用 Tab 补全来滚动浏览指定可用区域性的参数列表。 若要列出所有可用参数,请使用以下命令:
(Get-Command Select-String).Parameters.Culture.Attributes.ValidValues
有关 .NET CultureInfo.Name 属性的详细信息,请参阅 CultureInfo.Name。
PowerShell 7 中引入了 Culture 参数。
参数属性
类型: | String |
默认值: | Culture of the current PowerShell session |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Encoding
指定目标文件的编码类型。 默认值是 utf8NoBOM
。
此参数的可接受值如下所示:
-
ascii
:对 ASCII(7 位)字符集使用编码。 -
ansi
:对当前区域性的 ANSI 代码页使用编码。 此选项已在 PowerShell 7.4 中添加。 -
bigendianunicode
:使用大端字节序以 UTF-16 格式进行编码。 -
bigendianutf32
:使用大端字节顺序以 UTF-32 格式进行编码。 -
oem
:对 MS-DOS 和控制台程序使用默认编码。 -
unicode
:使用小端字节序以 UTF-16 格式进行编码。 -
utf7
:采用 UTF-7 格式编码。 -
utf8
:采用 UTF-8 格式编码。 -
utf8BOM
:以 UTF-8 格式编码并附加字节顺序标记(BOM) -
utf8NoBOM
:采用不带字节顺序标记(BOM)的 UTF-8 格式进行编码。 -
utf32
:采用 UTF-32 格式编码。
从 PowerShell 6.2 开始,编码参数 还允许使用注册代码页的数字 ID(如 -Encoding 1251
)或注册代码页的字符串名称(如 -Encoding "windows-1251"
)。 有关详细信息,请参阅 Encoding.CodePage.NET 文档。
从 PowerShell 7.4 开始,可以使用 Ansi
参数的 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。
注释
UTF-7* 不再推荐使用。 从 PowerShell 7.1 起,如果为 utf7
参数指定 ,则会编写警告。
参数属性
类型: | Encoding |
默认值: | UTF8NoBOM |
接受的值: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Exclude
排除指定的项。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 *.txt
。 允许使用通配符。
参数属性
类型: | String[] |
默认值: | None |
支持通配符: | True |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Include
包括指定的项。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 *.txt
。 允许使用通配符。
参数属性
类型: | String[] |
默认值: | None |
支持通配符: | True |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-InputObject
指定要搜索的文本。 输入包含文本的变量,或键入获取文本的命令或表达式。
使用 InputObject 参数与将字符串向下发送到 Select-String
不同。
将多个字符串传递给 Select-String
cmdlet 时,它会搜索每个字符串中的指定文本,并返回包含搜索文本的每个字符串。
使用 InputObject 参数提交字符串集合时,Select-String
将集合视为单个组合字符串。 如果字符串在任何字符串中找到搜索文本,Select-String
将字符串作为单位返回。
FileInfo 对象被视为文件的路径。 指定文件路径时,Select-String
搜索文件的内容,而不是对象的 ToString()
表示形式。
参数属性
类型: | PSObject |
默认值: | None |
支持通配符: | False |
不显示: | False |
参数集
Object
Position: | Named |
必需: | True |
来自管道的值: | True |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
ObjectRaw
Position: | Named |
必需: | True |
来自管道的值: | True |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-List
仅从每个输入文件返回匹配文本的第一个实例。 这是检索包含与正则表达式匹配内容的文件列表的最有效方法。
默认情况下,Select-String
为每个找到的匹配项返回 MatchInfo 对象。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-LiteralPath
指定要搜索的文件的路径。 LiteralPath 参数的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将它括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。 有关详细信息,请参阅 about_Quoting_Rules。
参数属性
类型: | String[] |
默认值: | None |
支持通配符: | False |
不显示: | False |
别名: | PSPath, LP |
参数集
LiteralFileRaw
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
LiteralFile
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
-NoEmphasis
默认情况下,Select-String
突出显示与使用 Pattern 参数搜索的模式匹配的字符串。
NoEmphasis 参数禁用突出显示。
强调使用基于 PowerShell 背景和文本颜色的负色。 例如,如果 PowerShell 颜色是带有白色文本的黑色背景。 强调是带有黑色文本的白色背景。
此参数是在 PowerShell 7 中引入的。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-NotMatch
NotMatch 参数查找与指定模式不匹配的文本。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Path
指定要搜索的文件的路径。 允许使用通配符。 默认位置是本地目录。
指定目录中的文件,例如 log1.txt
、*.doc
或 *.*
。 如果仅指定目录,命令将失败。
参数属性
类型: | String[] |
默认值: | Local directory |
支持通配符: | True |
不显示: | False |
参数集
File
Position: | 1 |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
FileRaw
Position: | 1 |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
-Pattern
指定要在每个行上查找的文本。 模式值被视为正则表达式。
若要了解正则表达式,请参阅 about_Regular_Expressions。
参数属性
类型: | String[] |
默认值: | None |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | 0 |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Quiet
指示 cmdlet 返回简单的响应,而不是 MatchInfo 对象。 如果找到模式,则返回的值 $true
;如果未找到模式,则返回的值 $null
。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
File
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
Object
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
LiteralFile
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Raw
使 cmdlet 仅输出匹配的字符串,而不是 MatchInfo 对象。 这是与 Unix grep 或 Windows findstr.exe 命令最相似的行为的结果。
此参数是在 PowerShell 7 中引入的。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
ObjectRaw
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
FileRaw
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
LiteralFileRaw
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-SimpleMatch
指示 cmdlet 使用简单匹配而不是正则表达式匹配。 在简单的匹配中,Select-String
在 Pattern 参数中搜索文本的输入。 它不会将 Pattern 参数的值解释为正则表达式语句。
此外,使用 SimpleMatch 时,返回的 MatchInfo 对象的 Matchs 属性为空。
注释
当此参数与 AllMatches 参数一起使用时,将忽略 AllMatches。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
(All)
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
PSObject
可以通过管道将具有 ToString()
方法的任何对象传递给此 cmdlet。
输出
MatchInfo
默认情况下,此 cmdlet 为每个找到的匹配项返回 MatchInfo 对象。
Boolean
使用 Quiet 参数时,此 cmdlet 返回一个 布尔 值,该值指示是否已找到模式。
String
使用 Raw 参数时,此 cmdlet 将返回一组与模式匹配的 字符串 对象。
备注
PowerShell 包含以下与 Select-String
相关的别名:
- 所有平台:
sls
Select-String
类似于 Unix 中的 grep
或在 Windows 中 findstr.exe
。
sls
cmdlet 的 Select-String
别名在 PowerShell 3.0 中引入。
注释
根据 PowerShell 命令 批准的谓词,Select-*
cmdlet 的官方别名前缀为 sc
,而不是 sl
。 因此,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 对象具有 Filename 和 Line等属性。 当输入不是来自文件中时,这些参数的值 InputStream。
如果不需要 MatchInfo 对象中的信息,请使用 Quiet 参数。 Quiet 参数返回一个布尔值(True 或 False),以指示它是否找到了匹配项,而不是 MatchInfo 对象。
匹配短语时,Select-String
使用为系统设置的当前区域性。 若要查找当前区域性,请使用 Get-Culture
cmdlet。
若要查找 MatchInfo 对象的属性,请键入以下命令:
Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *