Jump to content
Sign in to follow this  
the-dodger

Powershell - Textpassagen mit Zeilenumbruch löschen

Recommended Posts

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

 

Edited by the-dodger
typos

Share this post


Link to post
Share on other sites

Moin,

 

vermutlich ist die Antwort "Regular Expression", aber ich kann dir auf die Schnelle kein Beispiel geben.

 

Gruß, Nils

 

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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 }
}

 

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...