2016-04-15 6 views
1

Ich habe arbeiten diesePowershell Select-String: Wie fullPath und Kontextzeilen bekommen

select-string -path C:\test\*.txt -pattern "test" -allmatches –simplematch | foreach-object { 
    Write-Host $_.Filename 
    Write-Host $_.LineNumber 
    Write-Host $_.Line 
    Write-Host $_.context.postcontext 
} 

Aber ich möchte auch FullPath statt nur Filename erhalten. Ich möchte auch Kontextlinien vor und nach Line bekommen, aber es scheint nicht zu funktionieren.

Antwort

2

FilePath ist im Path -property zur Verfügung. Um den Kontext zu erhalten, müssen Sie zunächst angeben, wie viele Zeilen vor und nach der Verwendung von -Context 2 (2 Zeilen davor und danach) oder -Context 1,2 (1 vor, 2 danach) erfasst werden sollen. Ex.

select-string -path C:\test\*.txt -pattern "test" -AllMatches -SimpleMatch -Context 1,1 | foreach-object { 
    Write-Host 
    Write-Host "MATCH!" 
    Write-Host "-------------" 
    Write-Host "Path $($_.Path)" 
    Write-Host "Line number: $($_.LineNumber)" 
    Write-Host "Before: $($_.Context.Precontext)" 
    Write-Host "Line: $($_.Line)" 
    Write-Host "After: $($_.Context.Postcontext)" 
} 

Mustereingang (Text1.txt):

Line 1 
Line 2 
Line test 
Line 4 
Line 5 

Beispielausgabe:

MATCH! 
------------- 
Path C:\test\Text2.txt 
Line number: 4 
Before: Line 3 
Line: Line test 
After: Line 5 

MATCH! 
------------- 
Path C:\test\Text1.txt 
Line number: 3 
Before: Line 2 
Line: Line test 
After: Line 4 
1

Die Eigenschaft Context wird nicht ausgefüllt, ohne den Schalter -Context zu verwenden. Das resultierende Objekt verfügt außerdem über die Path-Eigenschaft, die über die vollständigen Pfadinformationen verfügt, nach denen Sie suchen.

Es dauerte nicht viel, um es zu aktualisieren. Mit Ihrem Beispiel:

select-string -path C:\test\*.txt -pattern "SG" -allmatches –simplematch -context 1 | foreach-object { 
    Write-Host $_.Filename 
    Write-Host $_.Path 
    Write-Host $_.LineNumber 
    Write-Host $_.Line 
    Write-Host $_.context.postcontext 
} 
Verwandte Themen