Anstatt wieder (gc $ bigfile) zu verwenden, was dazu führt, dass PowerShell $ bigfile in den Speicher jedes Objekts liest, das vom ForEach-Object-Cmdlet weitergeleitet wird, sollten Sie die Datei wahrscheinlich in eine Variable und dann Array lesen Index aus, dass, wie so:
$bigfile = gc 'c:\scripts\bigfile.txt'
$bigfile | Select-String "melissao" | % {$bigfile[($_.LineNumber -3)..($_.LineNumber +1)]}
da auch die Zeilennummerierung bei 1 beginnt und Array-Indizierung beginnt bei 0 Sie rückwärts von 3 gehen, nicht 2, die Linie zwei Räume oben "zu erhalten Melissio ", und gehe vorwärts um 1, nicht 2, um die Linie zwei Räume unter" Melissao "zu bekommen. Dadurch werden Sie die 5 Linien, die Sie wollen, "melissao", flankiert von den zwei Linien darüber und darunter, erhalten.
Ich bin nicht super vertraut mit Grep -C 2, also weiß ich nicht, ob dies genau diese Funktionalität repliziert.
Was genau macht Grep-C2? – JaredPar
bietet Context, @JaredPar - http://unixhelp.ed.ac.uk/CGI/man-cgi?grep – warren