Powershell: Inhalt von 2x TXT Dateien mit RegEX vergleichen und ggf. Zeilen löschen
Guten Morgen.
Vorab wünsche ich Euch allen nachträglich ein frohes und gesundes neues Jahr.
Leider habe ich ein kleines Problem und finde keinen Lösungsweg.
Ich habe zwei TXT Dateien.
Beispiel: 1. TXT (Ohne weiteren Zwischentext):
Beispiel: 2. TXT:
Ziel ist es dieses Ergebnis in einer neuen TXT zu speichern:
Bei der zweiten TXT sind die Zahlen hinter der Leertaste nicht relevant und können ignoriert werden (z.B. 12a, oder 1198a etc...).
Wichtig für das "Suchen und Ersetzen" sind immer die Zeilen mit Beginn der Zahlen (z.B. 909_909 etc.).
Um die erste TXT durchsuchen zu können kann man ggf. diesen RegEX (hxxx://regex101.com) verwenden:
Und bei der zweiten TXT diesen:
Beispiel 2. TXT:
Hierbei werden ggf. Zeilen per RegEX gefunden und entfernt.
Wie kann man nun mit ggf. - compare / - replace einen Abgleich der 1. mit der 2. TXT durchführen, und die fast identische Zeilen in der 2. TXT löschen?
Bekannt ist mir die leere Zeilen am Ende mit:
zu entfernen.
hilft mir leider dabei nicht weiter, weil ohne RegEX keine fast identische Zeilen gefunden werden.
Ich habe an einen array Vergleich + RegEX gedacht, aber leider weiß ich nicht wie man das genau machen kann.
Ein -split funktioniert leider auch nicht, da zusätzlicher Zwischentext in der 2. TXT steht. Bei einer neuen Suche kann dieser aber auch in einer
anderen Zeile stehen.
Ich vermute das man das "Suchen- und Ersetzen" nur mit compare und RegEx hinbekommt. Nur bitte WIE?
Ich hoffe das jemand vielleicht einen Tipp hat.
Über eine Hilfestellung wäre ich sehr dankbar.
Gruß
Vorab wünsche ich Euch allen nachträglich ein frohes und gesundes neues Jahr.
Leider habe ich ein kleines Problem und finde keinen Lösungsweg.
Ich habe zwei TXT Dateien.
Beispiel: 1. TXT (Ohne weiteren Zwischentext):
12_12_xxx.abc
932_932_xxx.abc
1198_1198_xxx.abc
Beispiel: 2. TXT:
Duis autem vel eum iriure dolor.
7_7_xxx.abc 7a
12_12_xxx.abc 12a
Duis autem vel eum iriure dolor.
852_852_xxx.abc 852a
909_909_xxx.abc 909a
Eel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et.
932_932_xxx.abc 932a
1198_1198_xxx.abc 1198a
Ziel ist es dieses Ergebnis in einer neuen TXT zu speichern:
Duis autem vel eum iriure dolor.
7_7_xxx.abc 7a
Duis autem vel eum iriure dolor.
852_852_xxx.abc 852a
909_909_xxx.abc 909a
Eel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et.
Bei der zweiten TXT sind die Zahlen hinter der Leertaste nicht relevant und können ignoriert werden (z.B. 12a, oder 1198a etc...).
Wichtig für das "Suchen und Ersetzen" sind immer die Zeilen mit Beginn der Zahlen (z.B. 909_909 etc.).
Um die erste TXT durchsuchen zu können kann man ggf. diesen RegEX (hxxx://regex101.com) verwenden:
\d{1,4}_\d{1,4}_[a-z]{1,}.[a-z]{3}
\d{1,4}_\d{1,4}_[a-z]{1,}.[a-z]{3} \d{1,4}[a-z]
Beispiel 2. TXT:
clear host
$regex = "\d{1,4}_\d{1,4}_[a-z]{1,}.[a-z]{3} \d{1,4}[a-z]"
# 1198_1198_xxx.abc 1198a
Get-ChildItem ".\b.txt" |
Foreach-Object {
$b = ($_ | Get-Content)
$b = $a -replace $regex,''
[IO.File]::WriteAllText($_.FullName, ($b -join "`r`n"))
}
Hierbei werden ggf. Zeilen per RegEX gefunden und entfernt.
Wie kann man nun mit ggf. - compare / - replace einen Abgleich der 1. mit der 2. TXT durchführen, und die fast identische Zeilen in der 2. TXT löschen?
Bekannt ist mir die leere Zeilen am Ende mit:
Get-Content ".\b.txt" | where {$_ -ne ""} | Out-File ".\c.txt"
compare -ReferenceObject (Get-Content ".\a.txt") -DifferenceObject (Get-Content ".\b.txt") > .\ok.txt
Ich habe an einen array Vergleich + RegEX gedacht, aber leider weiß ich nicht wie man das genau machen kann.
$test1 = @(Get-Content ".\a.txt")
$test2 = @(Get-Content ".\b.txt")
$regex = "\d{1,4}_\d{1,4}_[a-z]{1,}.[a-z]{3}"
if ($test1 -and $test2){
???? compare -ReferenceObject (Get-Content ".\a.txt") -DifferenceObject (Get-Content ".\b.txt") ???
??? (Get-Content $test2) "$regex", "" | Set-Content ".\neu" ???
}
Ein -split funktioniert leider auch nicht, da zusätzlicher Zwischentext in der 2. TXT steht. Bei einer neuen Suche kann dieser aber auch in einer
anderen Zeile stehen.
Ich vermute das man das "Suchen- und Ersetzen" nur mit compare und RegEx hinbekommt. Nur bitte WIE?
Ich hoffe das jemand vielleicht einen Tipp hat.
Über eine Hilfestellung wäre ich sehr dankbar.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1687393472
Url: https://administrator.de/contentid/1687393472
Ausgedruckt am: 19.11.2024 um 05:11 Uhr
2 Kommentare
Neuester Kommentar
$txt1 = gc ".\a.txt"
$txt2 = gc ".\b.txt"
$txt2 | ?{($_ -split '\s+') -notin $txt1} | sc ".\result.txt"