作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个日志文件列表,这些日志文件每天在00:00:00创建,因此每天都记录在一个单独的日志文件中。每天都会基于4种不同的原因创建4个日志文件,我必须遍历它们并选择错误消息。
日志文件具有以下结构:
07.11.2016 12:00:41 Flag: Mandant=1, Modul=V, Pool=5
07.11.2016 12:00:41 Verarbeiten: M1, V, Pool 5, Dok 526198(), DokTyp 3, Skript BU-CO110.FF, Drucker 97
07.11.2016 12:00:41 fataler Fehler SalDocPoolItem_Process(5,): Err-226/VER-Dokument nicht gefunden: 0
07.11.2016 12:00:57 Flag: Mandant=1, Modul=V, Pool=5
07.11.2016 12:00:57 Verarbeiten: M1, V, Pool 5, Dok 526198(), DokTyp 3, Skript BU-CO110.FF, Drucker 97
07.11.2016 12:00:57 fataler Fehler SalDocPoolItem_Process(5,): Err-226/VER-Dokument nicht gefunden: 0
07.11.2016 12:01:13 Flag: Mandant=1, Modul=V, Pool=5
07.11.2016 12:01:13 Verarbeiten: M1, V, Pool 5, Dok 526198(), DokTyp 3, Skript BU-CO110.FF, Drucker 97
07.11.2016 12:01:13 fataler Fehler SalDocPoolItem_Process(5,): Err-226/VER-Dokument nicht gefunden: 0
$FailArray
变量中
get-content
,因为我觉得这没有必要,我敢肯定有比我更好的解决方案:
# Prepare Array
$FailArray = @()
# Search for Log Files
$a = gci "C:\path" -filter *.log | ? { $_.LastWriteTime -ge (get-date).AddDays('-1') }
# Loop over Log Files
$a | % {
# Are there errors in the log?
$x = get-content $_.FullName | ? { $_ -like "*Fehler*" }
# If there are errors in the block, get the "time stamp" of the Block, like 12:00:57
if ($x) { $y = $x | % { $_.split(' ')[1] } } else { return }
# Search the whole block, depending on the timestamp
$z = get-content $_.FullName | ? { $_ -like "*$y*" }
# Add found blocks to FailArray
$FailArray += $z
}
07.11.2016 12:00:24 Flag: Mandant=1, Modul=V, Pool=5
07.11.2016 12:00:25 Verarbeiten: M1, V, Pool 5, Dok 526198(), DokTyp 3, Skript BU-CO110.FF, Drucker 97
07.11.2016 12:00:25 fataler Fehler SalDocPoolItem_Process(5,): Err-226/VER-Dokument nicht gefunden:
最佳答案
您可以使用-context
参数并选择匹配项+实际匹配项上方的两行:
$FailArray = gci "C:\path" -filter *.log | ? { $_.LastWriteTime -ge (get-date).AddDays('-1') } | % {
Select-String -Path $_ -Pattern 'fataler Fehler' -Context 2,0 | foreach {$_.Context.PreContext; $_.Line}
}
关于powershell - 搜索文件中的某些字符串,而无需两次遍历内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40523628/
我是一名优秀的程序员,十分优秀!