想要在powershell脚本中使用正则表达式从字符串中提取子字符串

时间:2013-02-07 13:10:18

标签: powershell

我想从Windows PowerShell脚本编写中使用REGEX的详细说明了解正在运行的进程的状态。 我想从这个字符串中提取RUNNING

  

名称:Process_name已开始2008-04-21 11:33状态 RUNNING   检查站滞后00:00:00

3 个答案:

答案 0 :(得分:3)

使用-replace

$text = 'Name: Process_name Started 2008-04-21 11:33 Status RUNNING Checkpoint Lag 00:00:00'
$text -replace '.+\sStatus\s(\S+)\sCheckpoint.+','$1'
RUNNING

答案 1 :(得分:1)

要提取RUNNINGSTOPPED等,您可以尝试以下操作:

PS > $s = "Name: Process_name Started 2008-04-21 11:33 Status RUNNING Checkpoint Lag 00:00:00", "Name: Process2_name Started 2008-04-21 11:33 Status STOPPED Checkpoint Lag 00:00:00"

PS > $s | % { if ($_ -match "Status (.+) Checkpoint") { 
    #Return match from group 1
    $Matches[1] 
    }
}

RUNNING
STOPPED

如果您正在阅读日志文件,可以将其内容直接发送到测试中,如下所示:

PS > Get-Content mylog.txt | % { if ($_ -match "Status (.+) Checkpoint") { 
    #Return match from group 1
    $Matches[1] 
    }
}

这是在“状态”和“检查点”之间提取所有内容,只要它至少有1个字符(也可以是多个单词)。

答案 2 :(得分:0)

如果您正在寻找Windows进程,使用支持属性和过滤的Get-Process或者WMI等效的gwmi Win32_Process是不是更有意义?

如果我弄错的话,可能会离开这里,所以纠正我!