Schwanzmuster mit Kontext in Powershell

674
gordy

Wenn ich ein Protokoll so baue:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple | % 

Es funktioniert wie erwartet, wobei Zeilen mit "Exception" ausgespuckt werden, aber wenn ich versuche, einen Kontext wie diesen hinzuzufügen:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple -cont 1,2 | % 

..es funktioniert genauso, es enthält keine Kontextzeilen. Kann mir jemand sagen, warum und was ich tun könnte, um solche Kontextzeilen zu erhalten?

1

1 Antwort auf die Frage

1
beatcracker

... es funktioniert genauso, es enthält keine Kontextzeilen.

Weil es keinen Kontext gibt! Sie haben ausdrücklich gesagt Get-Content, dass Sie die 1letzte Zeile mit packen sollen -Last 1, also Select-Stringnur eine Zeile erhält.

Kann mir jemand sagen, warum und was ich tun könnte, um solche Kontextzeilen zu erhalten?

Natürlich müssen Sie nur die Anzahl der Zeilen für den LastParameter erhöhen . Angenommen, Sie stimmen mit der 1Zeile in regex überein und wollen 1line vor und 2nach ( -Context 1,2), dann wäre die Gesamtanzahl der Zeilen 1 + 1 + 2 = 4:

Get-Content -Path 'xxx.log' -Tail 4 | Select-String -Pattern 'Exception' -SimpleMatch -Context 1,2 | ForEach-Object { $_.Context.PreContext $_.Line $_.Context.PostContext }