0

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

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
4

2 回答 2

1

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

Get-Content mylog.txt | select-string "the timeout period" -context 2 | 
    Foreach {$_.Context.PreContext[0]}
于 2013-01-22T16:48:15.237 回答
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
于 2013-01-22T17:12:45.577 回答