powershell 的一些正则表达式

powershell 的一些正则表达式

我有以下示例文件。

Symmetrix 逻辑设备数量 = 13
CLARiiON 逻辑设备数量=0
Invista 逻辑设备数=0
通用逻辑设备计数=0
==============================================================================
----- 主机总线适配器 --------- ------ I/O 路径 ----- ------ 统计 ------
### HW 路径摘要总死 IO/秒 Q-IO 错误
==============================================================================
   2 port2\path0 已降级 13 3 - 0 3
   3 port3\path0 已降级 13 3 - 0 3



10:00:00:00:c9:69:5b:70 的端口属性

节点 WWN:20 00 00 00 c9 69 5b 70
端口 WWN:10 00 00 00 c9 69 5b 70
端口符号名:Emulex PPN-10:00:00:00:C9:69:5B:70
端口 FCID:78004A
端口类型:结构
港口状态:运营
港口服务类型 : 8
端口支持 FC4:00 00 01 00 00 00 00 01
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
端口活动 FC4:00 00 01 00 00 00 00 01
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
端口支持速度:1 2 4 GBit/秒。
端口速度:1 GBit/秒。
最大帧尺寸:2048
操作系统设备名称:\\.\Scsi2:
发现端口数:2
面料名称 : 20 02 00 0d ec f1 00 c1


10:00:00:00:c9:69:37:63 的端口属性

节点 WWN:20 00 00 00 c9 69 37 63
端口 WWN:10 00 00 00 c9 69 37 63
端口符号名:Emulex PPN-10:00:00:00:C9:69:37:63
港口 FCID:780098
端口类型:结构
港口状态:运营
港口服务类型 : 8
端口支持 FC4:00 00 01 00 00 00 00 01
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
端口活动 FC4:00 00 01 00 00 00 00 01
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
                      00 00 00 00 00 00 00
端口支持速度:1 2 4 GBit/秒。
端口速度:1 GBit/秒。
最大帧尺寸:2048
操作系统设备名称:\\.\Scsi3:
发现端口数:2
面料名称:20 02 00 0d ec f0 b5 81

我需要在 powershell 中仅选择以下部分。我该如何实现?如果能从中创建对象就好了,但拆分就足够了

==============================================================================
----- 主机总线适配器 --------- ------ I/O 路径 ----- ------ 统计 ------
### HW 路径摘要总死 IO/秒 Q-IO 错误
==============================================================================
   2 port2\path0 已降级 13 3 - 0 3
   3 port3\path0 已降级 13 3 - 0 3

多谢

PS.
我尝试使用下面的代码行但它返回的不仅仅是需要的块:

[regex]::match($file,'(={3,}).+(?=Port\sAttributes\sfor.+)',"singleline").value

PPS。
真的很抱歉,我对正则表达式不够熟悉,所以我才问

答案1

假设您在文件中提供了日志内容hba.log,以下将返回以“=”、“-”、“#”开头的所有行,或包含一个或多个空格字符、后跟数字、后跟空格字符、后跟“端口”的行:

Get-Content hba.log | Where-Object { $_ -match "^[=#-]|\s{1,}\d\sport" }

此处测试返回:

==============================================================================
----- Host Bus Adapters ---------  ------ I/O Paths -----  ------ Stats ------
### HW Path                        Summary   Total   Dead  IO/Sec Q-IOs Errors
==============================================================================
   2 port2\path0                   degraded     13      3       -     0      3
   3 port3\path0                   degraded     13      3       -     0      3

如果2 port2\path0行以制表符或特定数量的空格开头,我们可以重写上面的内容以改为使用它。您需要在问题中阐明第 9-10 行的可能值是什么[-n如果您需要更具体的内容,可以包含?]。

相关内容