[玩转系统] 使用 PowerShell 和正则表达式捕获名称
作者:精品下载站 日期:2024-12-14 07:55:22 浏览:16 分类:玩电脑
使用 PowerShell 和正则表达式捕获名称
当您继续学习和使用 PowerShell 时,您最终会遇到正则表达式。希望你们中的许多人已经具备一些基础知识。如果没有,首先要开始阅读帮助主题 about_regular_expressions 在本文中,我将向您介绍一个高级正则表达式主题 - 名为捕获。我承认,当我第一次学习这个话题时,它让我头晕目眩。但希望我能减慢旋转木马的速度。
让我们从这样的字符串开始。
$t = "2019-06-21 17:12:31Z : 172.16.1.123 [ Begin process data ]"
这可能是您日志文件中的内容。由于PowerShell的优势来自于它处理对象的能力,因此将日志文件转换为对象集合可能会更容易。
从模式开始
为了使其发挥作用,并且为了使用正则表达式,您必须知道您的数据是什么样子,并且它必须是一致且可预测的。在此示例中,我有一个日期时间字符串、一个 IPv4 地址,然后是括号内的消息。第一步是创建匹配这些不同元素的正则表达式模式。让我们从日期时间开始。
$t -match "\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}Z"
该模式表示,找到以 4 位数字开头的内容。 \d 表示一个数字,而 {4} 表示正好 4 个数字。然后是一个破折号,后跟 2 个数字 (\d{2}),另一个破折号和 2 个数字。那应该给我日期。但还有一点。我需要捕获空格 (\s),然后我有一个模式来匹配现在您应该识别的时间。结尾是一个字面Z
正如你所看到的,这完全符合我想要的。顺便说一句,您通常可以编写不止一种模式。我试图坚持简单明了的模式。正则表达式可以够神秘的!
接下来,我需要匹配 IP 地址。
$t -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
该模式表示以至少 1 位且不超过 3 位数字开头。 (\d{1,3}) 后跟一个句点。 (\.)。句点是一个特殊的正则表达式字符,它具有任何含义。\是转义字符,它告诉 PowerShell 查找文字句点。对于剩余的八位位组重复此模式。
此模式不会验证地址,只是验证它看起来像一个IP地址。有些模式具有更多限制,但我不想增加任何更多的复杂性。在我的情况下,我知道该地址是有效的。
最后是方括号之间的文本。
$t -match "\[.*\]"
括号是一个特殊的正则表达式字符,所以我需要对其进行转义。然后我要求匹配任何字符 (.) 的多个实例 (*)。
定义名称
一旦有了匹配的模式,您就可以用名称来定义它们。总体布局如下所示:
(?<capture-name>Your-Pattern)
括号是关键。我的日期时间模式可以定义为命名捕获:
(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}Z)
这是从头到尾描述整行文本的模式。
[regex]$rx = '(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}Z)\s:\s(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s\[\s(?<status>.*)\]'
我已经调整了最后一个模式以不包含括号。我还可以使用其他高级正则表达式技术,但我保持简单。需要注意的重要一点是,我将 $rx 定义为一种特殊类型的对象。这个正则表达式对象允许我做的事情不仅仅是简单地使用 -match 运算符。在这种情况下,我可以用它来查找匹配项。
这很好。但这些名字是如何发挥作用的呢?
在 PowerShell 中使用命名捕获
在比赛中,您可以看到 Groups 属性。这是可以找到命名捕获的地方。
使用 PowerShell,可以通过跳过第一个匹配组轻松仅获取指定的捕获。
那几乎看起来像一个物体!创建一个实际的对象并不需要太多的时间。
$m.groups | Select-Object -Skip 1 | foreach-object -begin { $h = @{} } -process {
$h.Add($_.name,$_.value.trim())
} -end {
[pscustomobject]$h
}
不过,如果日期是日期时间对象而不是字符串,那就更好了。这是一个替代方案,假设您知道命名捕获的顺序。
$o = [pscustomobject]@{
Date = $m.groups[1].value -as [datetime]
IPAddress = $m.groups[2].value -as [ipaddress]
Status = $m.groups[3].value
}
正如你所看到的,这是一个对象。
使用此代码,我可以编写一个脚本来处理日志文件的每一行,创建一个自定义对象。这使得过滤、排序或执行任何其他我需要对数据执行的操作变得更加容易。
从文本转换
或者更简单的方法怎么样?现在您已经知道如何使用命名捕获创建正则表达式模式,您可以使用我的 PSScriptTools 模块中的 ConvertFrom-Text 命令,您可以从 PowerShell 库安装该模块。使用此命令,您可以创建代码以将任何文本输出转换为 PowerShell 对象。
$c = "(?<Protocol>\w{3})\s+(?<LocalIP>(\d{1,3}\.){3}\d{1,3}):(?<LocalPort>\d+)\s+(?<ForeignIP>.*):(?<ForeignPort>\d+)\s+(?<State>\w+)?"
netstat -an | select -skip 4 | convertfrom-text $c | where-object {$_.LocalIP -ne '0.0.0.0'} | format-table -autosize
一旦您至少掌握了一些基本的正则表达式技能,您就会发现自己经常使用它。与任何新语言一样,你使用它的次数越多,你就会变得越流利。
猜你还喜欢
- 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