Powershell Select-String Matches

时间:2013-01-22 15:52:16

标签: powershell

我有一个日志,我正在搜索特定的字符串(“超时期限”)。我可以使用以下内容在我的日志中获取此实例:

Get-Content mylog.txt | select-string 'the timeout period' | select-object

我遇到的问题是,这是一个XML文件,PowerShell只会收到错误的行,而我确实需要数据/时间信息。我需要的是在匹配“超时时间”的行实例之前匹配“线程”的行实例。例如:

Thread 3423 - 6:34:00
Info following. ..... ....
Error .... the timeout period

所以我要输出的是:

Thread 3423 - 6:34:00

2 个答案:

答案 0 :(得分:1)

如果文件是XML,我会考虑使用Select-Xml和XPath搜索模式。也就是说,您可以像这样使用Select-String:

Get-Content mylog.txt | select-string "the timeout period" -context 2 | 
    Foreach {$_.Context.PreContext[0]}

答案 1 :(得分:1)

我猜信息部分可以是多行。所以这是我的尝试:

$content = Get-Content .\test.txt
$content | select-string "the timeout period" | % {
    $i = ($_.linenumber -1)

    while ($content[$i] -notlike "Thread*") {
        $i--
    }

    $content[$i]
}

显示每个错误以“Thread”开头的上一行。防爆。输出:

Thread 3423 - 1:34:00
Thread 3423 - 2:34:00
Thread 3423 - 3:34:00
Thread 3423 - 4:34:00