[玩转系统] 如何使用 PowerShell Grep(选择字符串)
作者:精品下载站 日期:2024-12-14 13:01:58 浏览:14 分类:玩电脑
如何使用 PowerShell Grep(选择字符串)
许多系统管理员首先学习的 Linux 命令之一是 grep。这个古老的工具已经存在了几十年,对于任何管理员的工具带都至关重要。 Grep 的核心就是在纯文本中搜索正则表达式模式的能力。 Grep 可以搜索给定目录中的文件或流式输入以输出匹配项。您知道 PowerShell 有 grep 吗?嗯..几乎。
PowerShell 作为一种语言,不仅仅是一种单一用途的二进制文件。那么,有哪些内置功能可以像 grep 一样使用正则表达式模式搜索纯文本呢?在本文中,我们探讨使用 PowerShell 在文件中搜索文本的多种方法。
探索 Select-String
Cmdlet
Select-String
(我们的 PowerShell grep)适用于文本行,默认情况下将查找每行中的第一个匹配项,然后显示文件名、行号和匹配行中的文本。此外,Select-String
可以通过使用字节顺序标记 (BOM) 来确定编码格式,从而处理不同的文件编码,例如 Unicode 文本。如果缺少 BOM,Select-String
将假定它是 UTF8 文件。
Select-String
的参数
AllMatches
- 通常,Select-String
将仅查找每行中的第一个匹配项,使用此参数,cmdlet 将搜索多个匹配项。仍将为每行发出一个MatchInfo
对象,但它将包含找到的所有匹配项。CaseSensitive
- 默认情况下,匹配不区分大小写,这会强制 cmdlet 查找与输入模式完全匹配的匹配项。Context
- 一个非常有用的参数,您可以定义将显示的匹配之前和之后的行数。添加此参数会修改发出的MatchInfo
对象,以包含一个新的Context
属性,该属性包含指定的行。
请记住,如果您将 Select-String
的输出通过管道传输到另一个 Select-String
调用,则上下文将不可用,因为您只搜索生成的单个 MatchInfo
line
属性。
Culture
- 与SimpleMatch
参数一起使用,指定要与指定模式匹配的区域性。其中包括en-US
、es
或fr-FR
等选项作为示例。其他一些有用的选项是 Ordinal 和 Invariant 选项。Ordinal
用于非语言二进制比较,Invariant
用于文化独立比较。
此参数是在 PowerShell 7 中引入的,并且在之前的版本中不可用。另请记住,默认情况下,这将使用系统的当前区域性,可以使用 Get-Culture
找到该区域性。
-
Encoding
- 指定要搜索的目标文件的编码,默认为utf8NoBOM
。ascii
:使用 ASCII(7 位)字符集的编码。
bigendianunicode
:使用 big-endian 字节顺序以 UTF-16 格式进行编码。oem
:使用 MS-DOS 和控制台程序的默认编码。unicode
:使用小端字节顺序以 UTF-16 格式进行编码。utf7
:以UTF-7格式编码。utf8
:以UTF-8格式编码。utf8BOM
:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码utf8NoBOM
:以 UTF-8 格式编码,不带字节顺序标记 (BOM)utf32
:以 UTF-32 格式编码。
从 PowerShell Core 6.2 开始,Encoding
参数还接受注册代码页的数字 ID(例如 1251
)或字符串名称(例如 windows-1251
)代码>.
排除
- 使用Path
参数,使用模式排除特定项目,例如*.txt
。Include
- 就像Exclude
参数一样,Include
将仅包含使用模式的指定项目,例如*.log
.List
- 仅返回每个输入文件中匹配文本的第一个实例。这是一种快速有效的方法来检索具有匹配内容的文件列表。LiteralPath
- 这告诉Select-String
使用值作为输入,而不是将*
等值解释为通配符。如果路径包含转义字符,请将它们括在单引号中以不进行任何解释。NoEmphasis
- 禁用匹配项的突出显示,而不是突出显示与模式匹配的字符串。默认情况下,强调使用基于背景文本颜色的负色。NotMatch
- 查找与指定模式不匹配的文本。Path
- 指定要搜索的文件的路径。允许使用通配符,但不能仅指定目录。默认为本地目录。Pattern
- 基于正则表达式搜索输入内容或文件的模式。SimpleMatch
- 使用简单匹配而不是正则表达式。由于未使用 RegEx,因此返回的MatchInfo
对象的Matches
属性中没有任何值。Raw
- 输出匹配的字符串,没有MatchInfo
对象。这是与grep
最相似的行为,而不是 PowerShell 更面向对象的性质。Quiet
- 如果找到模式,则仅返回$true
或$false
。
使用 PowerShell Grep err...Select-String
当然,了解 cmdlet 的参数和选项如何工作与在生产环境中使用它并不完全相同。让我们深入研究示例,看看如何利用 Select-String
来更轻松地查找文本匹配。
我们可以通过三种方式使用Select-String
来查找匹配项。
- 将带引号的文本通过管道传输到
Select-String
cmdlet,即文本中的流。 - 使用存储在变量中的文本,将变量传递给
InputObject
参数。 - 使用
Path
参数指定要在其中搜索文本的文件。
我们用于测试的文件是随机生成的内容,但与生产系统中常见的类型相同。
文件中的简单匹配
从一个非常简单的示例开始,让我们在几个 CSV 文件中查找 Joe
。
Select-String -Path "Users\*.csv" -Pattern "Joe"
正如您所知,这非常简单,我们看到 Joe
如何在行上与其余数据一起突出显示。但这里实际上返回了什么数据?让我们看一下返回的匹配项的所有属性。
Select-String -Path "Users\*.csv" -Pattern "Joe" | Select-Object * -First 1
我们这里有几个有用的属性。特别是行
、路径
、模式
和匹配
。我们想知道的大部分内容都在 matches
属性中。
Select-String -Path "Users\*.csv" -Pattern "Joe" | Select-Object -ExpandProperty Matches -First 1
在这里您可以看到,尽管我们使用了一个简单的表达式,但这仍然是一个 RegEx 表达式以及可用的后续详细信息。
如果我们使用逗号分隔模式查找多个不同的值怎么办?这很有用,因为它实际上定义了三种不同的模式,而不是一个复杂的正则表达式值。
Select-String -Path "Users\*.csv" -Pattern "Joe","Marti","Jerry"
如果我们从搜索中仅选择文件名
、模式
和行
,您可以看到情况如何。
Select-String -Path "Users\*.csv" -Pattern "Joe","Marti","Jerry" | Select-Object FileName, Pattern, Line
更复杂的正则表达式匹配
现在我们演示了一些更简单的匹配方法,那么如何更多地利用 RegEx 来实际寻找更有用的模式呢?这里的三个示例正在查找电子邮件地址、IP 地址和社会安全号码 (SSN)。这里使用的模式并不是构建正则表达式搜索的唯一方法,可能还有更简单的方法。 PowerShell Grep (Select-String) 是一个非常高级的 cmdlet。
让我们看看我们的文件中是否包含电子邮件。使用稍微复杂的正则表达式匹配(如下所示)将演示如何查找这些匹配项。
Select-String -Path "Users\*.csv" -Pattern '\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b' | Select-Object -First 10
当然,更令人担忧的可能是文件中是否包含 SSN。一个非常简单的匹配如下。
Select-String -Path "Users\*.csv" -Pattern '\d\d\d-\d\d-\d\d\d\d' | Select-Object -First 10
最后,如果我们想在文件中查找一些 IP 地址怎么办?使用另一个正则表达式来查找该模式可以快速完成工作。
Select-String -Path "Users\*.csv" -Pattern '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b' | Select-Object -First 10
关于此正则表达式的警告。从技术上讲,这将匹配 999.999.999.999
以内的值,这是一个无效的 IP。您可以构造更准确的正则表达式,但该表达式会变得更长,但这是一种权衡,具体取决于您想要做什么。
结合上下文进行搜索
上下文在故障排除中非常有用,它有助于解释事件发生之前和之后发生的情况。例如,让我们在 Apache 日志中搜索并找到此 suspendedpage.cgi
文本。
Select-String -Path "Web\*.txt" -Pattern "suspendedpage.cgi" -Context 1 | Select-Object -First 1
>
简单表示匹配的行,匹配之前和匹配之后各有一行。在此示例中,这可以告诉我们 Google 机器人正在寻找 robots.txt
,但不幸的是收到了 suspendedpage.cgi
结果。接下来,它去尝试主页,也许得到了同样的错误。
由 MatchInfo
对象发出的 context
属性中到底包含什么?如果我们展开该属性,您可以看到有 PreContent
和 PostContent
。这意味着如果有必要,您可以进一步操纵它。
Select-String -Path "Web\*.txt" -Pattern "suspendedpage.cgi" -Context 1 | Select-Object -ExpandProperty Context -First 1 | Format-List
搜索日志文件的其他示例位于了解 Microsoft DNS 调试日志等文章中,该文章演示了如何使用 Select-String
来查看 DNS 调试日志。 PowerShell grep 在那篇文章中很强大。
结论
Grep 是 Linux 世界中非常有用的工具,而 Select-String
在 PowerShell 世界中提供了许多相同的功能。添加 PowerShell 的面向对象特性只会增强 cmdlet 提供的实用性和有用性。
对于许多系统管理员来说,能够快速有效地搜索不同类型的日志文件以及理解上下文是一项极其重要且必要的能力。 PowerShell Select-String
使这一切变得简单,并节省了无数时间的故障排除!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag