the-dodger 0 Geschrieben 17. Mai 2018 Melden Teilen Geschrieben 17. Mai 2018 (bearbeitet) Hallo liebe Gemeinde, ich bin zwar kein wirklicher Frischling mehr im Bereich scripting unter Powershell, aber seit einigen Tagen zermarter ich mir das Hirn wegen unten angegebenen Problems: Ich habe eine config Datei mit folgendem Inhalt: #Start_OF_test - name: test ipsum dolor bla bla #End_OF_test #Start_OF_test_new - name: test_new bla abc bla bla #End_OF_test_new Basierend auf einer Nutzereingabe soll nun entweder das Segment "test" oder "test_new" gelöscht werden. Also im Endeffekt ( Nutzer hat "test" zum löschen angebeben ) soll es so aussehen: #Start_OF_test_new - name: test_new bla abc bla bla #End_OF_test_new Das Problem ist das der Inhalt der einzelnen Segmente variieren kann, deswegen auch die Abgrenzung mit "#Start OF..." und "#End OF..." Unter *nix würde folgender Befehl das gewünschte Ergebnis bringen: sed "/#Start_OF_test/,/#End_OF_test/ d" Wie bekomme ich das aber nun mit Powershell hin? Dank und Gruß, The Dodger bearbeitet 17. Mai 2018 von the-dodger typos Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. Mai 2018 Melden Teilen Geschrieben 17. Mai 2018 Moin, vermutlich ist die Antwort "Regular Expression", aber ich kann dir auf die Schnelle kein Beispiel geben. Gruß, Nils Zitieren Link zu diesem Kommentar
the-dodger 0 Geschrieben 17. Mai 2018 Autor Melden Teilen Geschrieben 17. Mai 2018 Gerade eben schrieb NilsK: Moin, vermutlich ist die Antwort "Regular Expression", aber ich kann dir auf die Schnelle kein Beispiel geben. Gruß, Nils Tach auch, War auch meine Idee, aber das führte leider nicht zum erwünschten Ergebnis: $displayname = "test" $sPat = "#Start_OF_$displayname(.*?)#End_OF_$displayname" $string = get-content $importpath -ReadCount 0| select-string -Pattern $sPat | select -expand Matches | select -expand Value $string brachte nur folgendes: #Start_OF_test - name: test ipsum dolor bla bla #End_OF_test Also den ganzen Text ohne Zeilenumbruch. Habe trotzdem versucht, dieses zu verwenden mit folgendem Code: (get-content "config.txt").replace($string,'') | out-file "config_new.txt" aber nichts wurde verändert. Dank und Gruß, The Dodger Zitieren Link zu diesem Kommentar
Beste Lösung Dukel 454 Geschrieben 17. Mai 2018 Beste Lösung Melden Teilen Geschrieben 17. Mai 2018 Als Quick and Dirty geht evtl. folgendes: # Eingabe einlesen oder festschreiben $eingabe = read-host "test or Test_new" $eingabe = 'test' # Danach die Start / Stop Werte definieren switch($eingabe){ "test" {$start = '#Start_OF_test'; $end = '#End_OF_test'} "test_new" {$start = '#Start_OF_test_new'; $end = '#End_OF_test_new'} } $read = $true # Datei einlesen und nur das benötigte ausgeben Get-Content .\test.txt | % { if($_ -eq $start){ $read = $false } if($read){ $_ } # Hier evtl. in Datei ausgeben und ggf. trimmen, damit leere Zeilen nicht ausgegeben werden elseif($_ -eq $end){ $read = $true } } Zitieren Link zu diesem Kommentar
the-dodger 0 Geschrieben 17. Mai 2018 Autor Melden Teilen Geschrieben 17. Mai 2018 Quick und Dirty???? Perfekt, bin ich dabei Nein, ernsthaft jetzt. Das macht genau das was ich will. Vielen, vielen Dank Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.