none
Mit Powershell Replace aus Datei machen RRS feed

  • Frage

  • Hallo,

    ich habe eine Textdatei mit mehreren tausend Zeilen an Code. Jetzt müsste ich dort ca. 200 Wörter verschiedene suchen/ersetzen. Ich habe jetzt eine Text- Datei mit den verschiedenen Suchbegriffen und einen weitere Text- Datei mit den ersetzt Texten. Der Text aus der ersten Datei in der ersten Zeile sollte also mit dem Text der zweiten Datei in der ersten Zeile ersetzt werden usw.

    Kann ich dies mit Powershell umsetzten? Da ich dies demnächst öfters machen muss wollte ich hierfür ein Script schreiben, konnte es aber nicht umsetzen.

    Danke

    Mittwoch, 21. Mai 2014 13:12

Antworten

  • Hallo Werner,

    verstehe ich das richtig:

    Du hast 3 Dateien:

    1. Diese datei wird bearbeitet
    2. Diese Datei enthält Suchbegriffe die in Datei 1. enthalten sind und gesucht werden müssen
    3. Diese Datei enthält die neuen Werte.

    Wenn du also in Datei 1 den suchbegriff aus Datei 2, Zeile x; findest dann soll dieser mit dem Text aus Datei 3 Zeile x ersetzt werden ?

    Wenn du das meinst dann kann ich dir sagen das es möglich sein sollte :)

    Lade zunächst alle Dateien in verschiedene Variablen, enumeriere dann durch jede Zeile in Datei 2. und überprüfe dabei ob es übereinstimmungen mit irgendeiner Zeile in Datei 1 gibt, wenn ja dann ersetze diese übereinstimmung durch den Begriff der in Datei 3 (selbe Zeilennummer) steht.

    In der Powershell würde das ganze so aussehen:

    $datei1 = Get-Content .\loremipsum.txt
    $datei2 = Get-Content .\search.txt
    $datei3 = Get-Content .\replace.txt
    
    for($i =0 ; $i -lt $datei2.count ; $i++)
    {
      $datei1=$datei1 |ForEach-Object{$_ -replace $datei2[$i],$datei3[$i]}
      
    }
    $datei1

    Einfacher wäre es wenn du die Dateien hier postest, dann kann man sich besser ein Bild davon machen.

    Gruß

    • Als Antwort markiert Werner A Donnerstag, 22. Mai 2014 19:50
    Mittwoch, 21. Mai 2014 20:44

Alle Antworten

  • Hallo Werner,

    verstehe ich das richtig:

    Du hast 3 Dateien:

    1. Diese datei wird bearbeitet
    2. Diese Datei enthält Suchbegriffe die in Datei 1. enthalten sind und gesucht werden müssen
    3. Diese Datei enthält die neuen Werte.

    Wenn du also in Datei 1 den suchbegriff aus Datei 2, Zeile x; findest dann soll dieser mit dem Text aus Datei 3 Zeile x ersetzt werden ?

    Wenn du das meinst dann kann ich dir sagen das es möglich sein sollte :)

    Lade zunächst alle Dateien in verschiedene Variablen, enumeriere dann durch jede Zeile in Datei 2. und überprüfe dabei ob es übereinstimmungen mit irgendeiner Zeile in Datei 1 gibt, wenn ja dann ersetze diese übereinstimmung durch den Begriff der in Datei 3 (selbe Zeilennummer) steht.

    In der Powershell würde das ganze so aussehen:

    $datei1 = Get-Content .\loremipsum.txt
    $datei2 = Get-Content .\search.txt
    $datei3 = Get-Content .\replace.txt
    
    for($i =0 ; $i -lt $datei2.count ; $i++)
    {
      $datei1=$datei1 |ForEach-Object{$_ -replace $datei2[$i],$datei3[$i]}
      
    }
    $datei1

    Einfacher wäre es wenn du die Dateien hier postest, dann kann man sich besser ein Bild davon machen.

    Gruß

    • Als Antwort markiert Werner A Donnerstag, 22. Mai 2014 19:50
    Mittwoch, 21. Mai 2014 20:44
  • Vielen Dank, genau dies habe ich gesucht.

    Werner

    Donnerstag, 22. Mai 2014 19:50