the-dodger 0 Geschrieben 17. Mai 2018 Melden 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
NilsK 3.046 Geschrieben 17. Mai 2018 Melden Geschrieben 17. Mai 2018 Moin, vermutlich ist die Antwort "Regular Expression", aber ich kann dir auf die Schnelle kein Beispiel geben. Gruß, Nils
the-dodger 0 Geschrieben 17. Mai 2018 Autor Melden 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
Beste Lösung Dukel 468 Geschrieben 17. Mai 2018 Beste Lösung Melden 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 } }
the-dodger 0 Geschrieben 17. Mai 2018 Autor Melden Geschrieben 17. Mai 2018 Quick und Dirty???? Perfekt, bin ich dabei Nein, ernsthaft jetzt. Das macht genau das was ich will. Vielen, vielen Dank
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden