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