Mehrere Wörter ersetzen Powershell Skript
Hallo an die Gemeinde!
Ich habe eine Textdatei, in der ich mehrere verteilte Wörter mittels Windows Powershell ersetzen möchte.
Um ein Wort durch ein anderes Wort zu ersetzen, habe ich bereits einen Code gefunden (funktioniert):
clear-Host
$file = Get-ChildItem "D:\1\1*.txt"
foreach ($str in $file)
{
$content = Get-Content -path $str
$content | foreach {$_ -replace "abcdefg", "123456"} | Set-Content $str
}
write-Host "After replace `n"
$file
Wie müsste der Code umgeschrieben werden, um mehrere Wörter ersetzen zu können (z.B. für Wort 1= Ersatz: jefbh, für Wort 2= Ersatz: ffbhf, usw., Wortanzahl ist fortwährend unterschiedlich)?
Danke Euch schonmal! P.s.: Ich benötige es zwingend als Windows Powershell Skript.
Ich habe eine Textdatei, in der ich mehrere verteilte Wörter mittels Windows Powershell ersetzen möchte.
Um ein Wort durch ein anderes Wort zu ersetzen, habe ich bereits einen Code gefunden (funktioniert):
clear-Host
$file = Get-ChildItem "D:\1\1*.txt"
foreach ($str in $file)
{
$content = Get-Content -path $str
$content | foreach {$_ -replace "abcdefg", "123456"} | Set-Content $str
}
write-Host "After replace `n"
$file
Wie müsste der Code umgeschrieben werden, um mehrere Wörter ersetzen zu können (z.B. für Wort 1= Ersatz: jefbh, für Wort 2= Ersatz: ffbhf, usw., Wortanzahl ist fortwährend unterschiedlich)?
Danke Euch schonmal! P.s.: Ich benötige es zwingend als Windows Powershell Skript.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 255951
Url: https://administrator.de/contentid/255951
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
4 Kommentare
Neuester Kommentar
Moin Beginner01,
z.b. so: (in der Hashtable in der ersten Zeile legst du die zu ersetzenden Wortpaare fest, beliebig erweiterbar)
Grüße Uwe
p.s. wenn du noch die PS 2.0 einsetzt musst du Zeile 3 so schreiben
z.b. so: (in der Hashtable in der ersten Zeile legst du die zu ersetzenden Wortpaare fest, beliebig erweiterbar)
$replacetable = @{"Wort1"="Ersatz1";"Wort2"="Ersatz2";"Wort3"="Ersatz4"}
gci "D:\1\1*.txt" | %{
$content = gc $_.Fullname
$replacetable.GetEnumerator() | %{$content = $content.Replace($_.Key,$_.Value)}
$content | set-content $_.Fullname
}
p.s. wenn du noch die PS 2.0 einsetzt musst du Zeile 3 so schreiben
$content = gc $_.Fullname | out-string
Bei einer Hashtable darf der Key-Wert (also der vor dem Gleichheitszeichen) nicht doppelt vorkommen. Das ist hier jetzt dein Problem.
Zusätzlich Zeichen entfernen ist aber kein Problem mit RegularExpression Replacements. In der Schleife könntest du also noch folgenden Eintrag zwischen Zeile 4 und 5 hinzufügen, deine Beispiel-Einträge jetzt mal aufgegriffen:
Diese Zeile entfernt alle <p> und alle </p> Gross und Kleinschreibung ist bei Verwendung von -replace irrelevant. Möchtest du weitere Zeichen ersetzen, trennst du diese mit einem Pipe-Zeichen "|" voneinander, das bedeutet in Regex-Syntax ODER.
Beispiel:
WICHTIG: Bitte beachte aber das du hier mit Regular-Expression Syntax arbeitest und bestimmte Sonderzeichen wie ($,^,\,|,?,{,}.,(,),*,+) mit einem Vorangestellten Backslash "Escapen" musst !!!
Regular Expression Tutorial
"Dirty" ohne Regex geht es natürlich auch, aber das wird schnell unübersichtlich, und ist kein schöner Stil...
usw.
Grüße Uwe
Zusätzlich Zeichen entfernen ist aber kein Problem mit RegularExpression Replacements. In der Schleife könntest du also noch folgenden Eintrag zwischen Zeile 4 und 5 hinzufügen, deine Beispiel-Einträge jetzt mal aufgegriffen:
$content = $content -replace '</?p>',''
Beispiel:
$content = $content -replace '</?p>|bla|blub',''
WICHTIG: Bitte beachte aber das du hier mit Regular-Expression Syntax arbeitest und bestimmte Sonderzeichen wie ($,^,\,|,?,{,}.,(,),*,+) mit einem Vorangestellten Backslash "Escapen" musst !!!
Regular Expression Tutorial
"Dirty" ohne Regex geht es natürlich auch, aber das wird schnell unübersichtlich, und ist kein schöner Stil...
$content = $content.Replace('<p>','').Replace('</p>')
Grüße Uwe