Okay, das macht mich verrückt, weil meine Regex an Rubular arbeitet, aber PowerShell funktioniert nicht so, wie ich es erwarte.
Wenn ich verwende:
%Vor%PowerShell packt den Text, nach dem ich suche, aber es greift nicht auf den Text, der in einer neuen Zeile beginnt, ich bekomme:
%Vor%Also ... wenn ich benutze:
%Vor%Ich bekomme nichts ...
Wenn ich das auf Rollar versuche, funktioniert es gut, was fehlt mir hier? Jede Hilfe wäre großartig, danke!
Filburt's Antwort ist eine gute und es sieht nicht so aus, als ob reguläre Ausdrücke das beste Werkzeug sind, um es hier zu verwenden. Sie sind jedoch auf ein Problem gestoßen, das im weiteren Verlauf Verwirrung stiften kann. Das Problem hierbei ist, dass die Variable Get-Content
keine mehrzeilige Zeichenfolge ist. Es ist ein Array von Strings:
Wenn Sie eine Regex-Übereinstimmung mit $var
ausführen, stimmt sie mit jedem Objekt im Array (jede Zeile in der Datei) überein. Es kann nicht über das Ende einer Zeile hinaus passen, da die nächste Zeile ein neues Objekt ist.
Eine Umgehungslösung besteht darin, dieses Array von Strings in eine einzelne Zeichenfolge wie folgt zu reduzieren:
%Vor% In Powershell kann es manchmal schwierig sein zu erkennen, wenn Sie mit einem einzelnen String-Objekt im Gegensatz zu einem Array von Strings arbeiten. Wenn Sie sie auf der Konsole ausgeben, erscheinen sie identisch. In diesen Fällen können GetType()
und Out-String
nützliche Werkzeuge sein.
Bearbeiten: Ab Powershell 3.0 enthält der Filesystem
-Anbieter einen -Raw
-Schalter für Get-Content
. Dieser Schalter weist Get-Content
an, die Datei auf einmal zu lesen, ohne sie in Chunks aufzuteilen. Es ist wesentlich schneller als die Verwendung der Out-String
-Ausweichlösung, da es keine Zeit damit verschwendet, Teile auseinander zu ziehen, sondern sie wieder zusammenzusetzen.
Es ist möglich, dass die Zeilen nicht mit \n
enden. Ich glaube, die Standardzeichen für die Zeilenschaltung in Windows ist \r\n
. Versuchen Sie, Ihre Regex neu zu schreiben, um dem zu entsprechen.
Tags und Links regex powershell