Powershell, Zeilen suchen und Zeilenumbruch entfernen wenn
Moin zusammen,
Hab ein Problem
Habe eine Datei in der folgendes geändert werden muß:
Suche eine Zeile die mit „H100“ anfängt, wenn nächste Zeile mit „I00“ anfängt, suche nächste Zeile die mit „H100“ anfängt.
Wenn nächste Zeile nicht mit „I00“ anfängt geh zum Ende der Zeile, füge ein Leerzeichen ein und entferne Zeilenumbruch
Das mach so lange bis nächste Zeile mit „I00“ anfängt
Ist sowas möglich mit Powershell ?
Gruß
Der Peter
Hab ein Problem
Habe eine Datei in der folgendes geändert werden muß:
Suche eine Zeile die mit „H100“ anfängt, wenn nächste Zeile mit „I00“ anfängt, suche nächste Zeile die mit „H100“ anfängt.
Wenn nächste Zeile nicht mit „I00“ anfängt geh zum Ende der Zeile, füge ein Leerzeichen ein und entferne Zeilenumbruch
Das mach so lange bis nächste Zeile mit „I00“ anfängt
Ist sowas möglich mit Powershell ?
Gruß
Der Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3852992915
Url: https://administrator.de/forum/powershell-zeilen-suchen-und-zeilenumbruch-entfernen-wenn-3852992915.html
Ausgedruckt am: 10.04.2025 um 05:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo,
kanns grad nicht testen. Ansatz wäre regulärer Ausdruck. Wenn die Zeile nicht mit den Kritereien bnfängt beider Zeile darüber \r\n durch ein "," ersetzen. Oder auch nur \n - je nach Datenquelle.
Holzhammer Methode: Alle Umbrüche entfernen und du hast alles in einer Zeile. Dann geweils vor H100 und 100 \r\n anfügen.
Mit Notepad++ kann man das auch testen. Es funktioniert nur nicht mit 1:1 Kopien des Codeschnipssel. Die Escape Zeichen sind bei PowerShell wieder andre
\r = `r
\n = `n
Aber das wären auf die schnelle 2 Ansätze.
mfg Crusher
kanns grad nicht testen. Ansatz wäre regulärer Ausdruck. Wenn die Zeile nicht mit den Kritereien bnfängt beider Zeile darüber \r\n durch ein "," ersetzen. Oder auch nur \n - je nach Datenquelle.
Holzhammer Methode: Alle Umbrüche entfernen und du hast alles in einer Zeile. Dann geweils vor H100 und 100 \r\n anfügen.
Mit Notepad++ kann man das auch testen. Es funktioniert nur nicht mit 1:1 Kopien des Codeschnipssel. Die Escape Zeichen sind bei PowerShell wieder andre
\r = `r
\n = `n
Aber das wären auf die schnelle 2 Ansätze.
mfg Crusher
Moin Peter,
Sicher, mit Powershell und ein bisschen RegEx kein problem
Bisschen Lesestoff:
Powershell Leitfaden für Anfänger
RegEx-Tutorial
RegEx-Legende
Gruß Thomas
EDIT ---:
Falls ja, wird das Ersetzen ein wenig komplexer. In dem Fall einfach Zeile 9 oben austauschen durch:
Sicher, mit Powershell und ein bisschen RegEx kein problem
# Quell- und Zieldatei
$Source = "C:\Pfad\zur\Quelldatei.txt"
$Target = "C:\Pfad\zur\Zieldatei.txt"
# Quelldatei als Rohtext lesen
$Content = Get-Content -Raw $Source
# Regex-Ersetzungen durchführen
$Content = $Content -Replace "\n(?!I00|H100)"," "
# Zieldatei Ausgeben
$Content | Set-Content $Target
Bisschen Lesestoff:
Powershell Leitfaden für Anfänger
RegEx-Tutorial
RegEx-Legende
Gruß Thomas
EDIT ---:
Zitat von @DerPeter02:
klappt aber nicht da es auch noch andere Zeilen gibt, es fangen nicht alle mit H100 oder I00 an.
Das heisst, diese Zeilen, die anders anfangen, sollen ebenfalls samt Zeilenumbrüchen erhalten bleiben?klappt aber nicht da es auch noch andere Zeilen gibt, es fangen nicht alle mit H100 oder I00 an.
Falls ja, wird das Ersetzen ein wenig komplexer. In dem Fall einfach Zeile 9 oben austauschen durch:
$Content = [regex]::Replace($Content,"(?sm)(^H100.*?)(?=\nI00)",{$Args -replace "\n"," "})
Moin,
Gruß Thomas
Zitat von @DerPeter02:
Ich hab für die gleiche Datei noch ein Script laufen, kann man das in das neue Script mit einbauen ?
Wohl eher Dateien - sicher geht das. Die Quelldateien sollen überschrieben werden?Ich hab für die gleiche Datei noch ein Script laufen, kann man das in das neue Script mit einbauen ?
# Quellpfad
$Source = "C:\Zwischenablage"
# Für jede Datei im Quellpfad...
Foreach ($File in Get-ChildItem -File -Path $Source) {
# Datei Inhalt als Rohtext lesen und Umlaute ersetzen
$Content = (Get-Content -Raw $File).Replace('ä','ae').Replace('ö','oe').Replace('ü','ue').Replace('ß','ss')
# Regex-Ersetzungen durchführen
$Content = [regex]::Replace($Content,"(?sm)(^H100.*?)(?=\r?\nI00)",{$Args -replace "[\r\n]+"," "})
# Zieldatei Ausgeben
$Content | Set-Content $File
} # ENDE Foreach File
Gruß Thomas
Serie: Powershell
Powershell, Zeilen suchen und Zeilenumbruch entfernen wenn7