wethlo
Goto Top

PowerShell: Bestimmte Zeilen in einer Textdatei finden und dann löschen

Guten Morgen!

Habe ein funktionierendes Skript, welches erweitert werden soll... Das funktionierende Skript durchsucht eine Textdatei und ersetzt die gefundenen Werte.

$original_file = 'C:\Users\Documents\Seite_1_1.xcs'  
$destination_file = 'C:\Users\Documents\Seite_1_1+.xcs'  

$ReplacedContent = Get-Content $original_file | Foreach-Object {
    $_.Replace("SetApproachStrategy(true, false, -1)", "SetApproachStrategy(false, true, 2)").  
       Replace("SetRetractStrategy(true, false, -1, 0)", "SetRetractStrategy(false, true, 2, 0)").  
       Replace("SetWorkpieceSetupPosition(0.0000, 0.0000, 0.0, 0.0)","SetWorkpieceSetupPosition(5.0000, 5.0000, 0.0, 0.0)")  
}

Ich möchte nun das Skript folgendermaßen erweitert:

Es soll bestimmte untereinander liegende Zeilen suchen und dann löschen. Die vier Zeilen sehen folgendermaßen aus:

try {
CreateMacro("PYTHA_INIT_1", "PYTHA_INIT");
}
catch (System.Exception e) { }

Über eine Hilfe würde ich mich sehr freuen...

Content-Key: 464330

Url: https://administrator.de/contentid/464330

Printed on: April 20, 2024 at 06:04 o'clock

Member: LeeX01
LeeX01 Jun 20, 2019 at 13:21:59 (UTC)
Goto Top
get-content -raw liest dir das File in einen String, dann musst du nur noch ersetzen und das ganze wieder speichern.
Member: colinardo
Solution colinardo Jun 20, 2019 updated at 16:35:43 (UTC)
Goto Top
Jepp, und dann macht man sich gleich eine Hashtable mit allen Ersetzungen welche sich dann leicht erweitern lässt:
Bsp:
function Replace-StringsInText{
    [cmdletbinding()]
    param(
        [parameter(mandatory=$true,ValueFromPipeline=$true)][string[]]$string,
        [parameter(mandatory=$true)][ValidateNotNullOrEmpty()][hashtable]$mapping
    )
    process{
        $mapping.GetEnumerator() | %{$string = $string -replace [regex]::Escape($_.Key),$_.Value}
        return $string
    }
}

$searchreplacemap = @{
    'SetApproachStrategy(true, false, -1)' = 'SetApproachStrategy(false, true, 2)'  
    'SetRetractStrategy(true, false, -1, 0)' = 'SetRetractStrategy(false, true, 2, 0)'  
    'SetWorkpieceSetupPosition(0.0000, 0.0000, 0.0, 0.0)' = 'SetWorkpieceSetupPosition(5.0000, 5.0000, 0.0, 0.0)'  
    'try {  
CreateMacro("PYTHA_INIT_1", "PYTHA_INIT");  
}
catch (System.Exception e) { }' = ''  
}

$original_file = 'C:\Users\Documents\Seite_1_1.xcs'  
$destination_file = 'C:\Users\Documents\Seite_1_1+.xcs'  

Replace-StringsInText -string (gc $original_file -raw) -mapping $searchreplacemap | sc $destination_file
Grüße Uwe