【发布时间】:2014-11-12 15:47:22
【问题描述】:
我有一个 shell 命令,我想使用 Powershell 提取数据。我需要的数据总是位于两个关键词之间,并且捕获的行数可以改变。
输出可能如下所示。
Sites:
System1:
RPAs: OK
Volumes:
WARNING: Storage group DR_UCS_01-08 contains both replicated and unreplicated volumes. ; CS_TX
WARNING: Storage group DR_UCS_21-28 contains both replicated and unreplicated volumes. ; CS_TX
WARNING: Storage group DR_UCS_31-38 contains both replicated and unreplicated volumes. ; CS_TX
Splitters: OK
System2:
RPAs: OK
Volumes:
WARNING: Storage group MA_UCS_1 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group MA_UCS_2 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group MA_UCS_3 contains both replicated and unreplicated volumes. ; CS_MA
Splitters: OK
WAN: OK
System: OK
我想捕获并存储到变量(或文本文件,如果更简单?)部分数据,以便稍后在脚本中重复使用。例如,我想捕获 System1: 和 System2: 之间的所有内容:
RPAs: OK
Volumes:
WARNING: Storage group DR_UCS_01-08 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group DR_UCS_21-28 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group DR_UCS_31-38 contains both replicated and unreplicated volumes. ; CS_MA
Splitters: OK
我一直在搞乱不同的正则表达式组合,但没有成功。我在这段代码上取得了一些成功,但它似乎无法处理警告行,而且我似乎也无法让 Out-File 使用它,只有 Write-Host 无济于事我很。
$RP = plink -l User -pw Password 192.168.1.100 "get_system_status summary=no" #extract from
$script = $RP
$in = $false
$script | %{
if ($_.Contains("System1"))
{ $in = $true }
elseif ($_.Contains("System2"))
{ $in = $false; }
elseif ($in)
{ Write-Host $_ }
}
理想情况下,我希望能够使用此脚本并使用它来解析来自任何 shell 命令的数据。我目前迷路了,几乎准备放弃。
【问题讨论】:
标签: regex shell parsing powershell