Select-String 是什么
Select-String 在文件或文本里按正则表达式查找匹配内容,相当于命令行环境里常用的文本搜索工具在 PowerShell 中的对应实现。它返回的是匹配对象,包含文件名、行号与匹配文本,因此可以直接按文件分组、按行号排序,也可以只取文件名列表。处理日志、核对配置、在代码库里找关键字都用它。因为返回结构化的匹配结果,它在脚本里比手工解析文本稳得多。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Select-String [-Path <文件或通配符>] [-Pattern <正则>] [-SimpleMatch] [-CaseSensitive] [-Context n] [-AllMatches] |
| 默认行为 | 按正则匹配,不区分大小写,输出含文件、行号与匹配行 |
| 字面搜索 | 加简单匹配开关后按纯文本查找,不做正则解释 |
| 上下文 | 指定上下文行数后,匹配行的前后若干行会一起输出 |
| 输入方式 | 可直接读文件,也可从管道接收文本行 |
典型使用场景
- 在日志里查找错误关键字,并带出行号方便定位
- 在代码库中递归搜索函数名,确认调用点分布
- 核对配置文件里是否存在某个参数
- 按文件分组统计匹配次数,找出问题最集中的文件
- 只取匹配到的文件名列表,交给后续处理
- 带上下文查看匹配行前后内容,判断报错的完整场景
常用示例
常用示例
# 在单个日志文件里查找错误关键字
Select-String -Path D:\Logs\app.log -Pattern 'ERROR'
# 递归搜索多个文件,只输出文件名
Select-String -Path D:\Web\*.config -Pattern 'connectionString' | Select-Object -ExpandProperty Path -Unique
# 带上下文:匹配行前后各两行
Select-String -Path D:\Logs\app.log -Pattern 'Exception' -Context 2,2
# 字面查找,避免正则元字符干扰
Select-String -Path D:\cfg\app.ini -Pattern 'D:\Data[1]' -SimpleMatch
# 区分大小写
Select-String -Path D:\Logs\app.log -Pattern 'ERROR' -CaseSensitive
# 按文件分组统计匹配次数
Select-String -Path D:\Logs\*.log -Pattern 'ERROR' | Group-Object Filename | Select-Object Name, Count参数速查
| 参数 | 作用 | 注意点 |
|---|---|---|
| -Pattern | 要匹配的内容,支持正则 | 含反斜杠与中括号时按正则语义解释 |
| -SimpleMatch | 按纯文本匹配 | 查找含特殊字符的路径或配置项时用 |
| -CaseSensitive | 区分大小写 | 排查特定写法时有用 |
| -Context | 输出匹配行前后的行数 | 格式为前面行数逗号后面行数 |
| -AllMatches | 一行里匹配多次时全部返回 | 默认每行只报告一次 |
| -Path 支持通配符 | 可一次搜索多个文件 | 配合递归参数可搜索子目录 |
返回结果里带文件名、行号与匹配行三个关键信息,按文件名分组或按行号排序都很方便。需要只保留文件清单时,取路径属性并去重即可。
模式里出现的反斜杠、中括号、点号都会被当作正则元字符。搜索包含这些字符的字面内容时加简单匹配开关,可以避免「明明文件里有却搜不到」的情况。