Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 19. Nov 2018 17:34

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: sed/perl Ausdruck gesucht
BeitragVerfasst: 13. Feb 2009 11:35 
Hallo,

ich suche eine Möglichkeit, in einem Textdokument, alles, was sich zwischen den Tags <desc> und </desc> befindet, zu löschen. Der Einfachheit halber, liegen beide Tags immer in einer Zeile.

So also jemand Spaß an regulären Ausdrücken hat, darf er (oder sie) sich gerne austoben


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 13. Feb 2009 11:48 
Kleine Korrektur:

Aus jeder Zeile, die mit <desc> (und beliebigen Tabs und/oder Leerzeichen davor) beginnt, den Inhalt zwischen <desc> und <strong> löschen, sowie den Inhalt zwischen </strong> und </desc>


Die fortgeschrittene Version, aber das würde ich nur wirklich süchtigen oder Gefahrensuchern ans Herz legen:

Alles, was zwischen
1) <desc> und <strong> liegt,
2) zwischen </strong> und <p>, aber nur, wenn nach dem <p> das nächste Zeichen kein < ist, wobei dazwischen natürlich beliebige Leerzeichen liegen können
3) Zwischen </p> und </desc>, aber auch nur, wenn nach dem </p> das nächste Zeichen wieder kein < ist, abgesehen von beliebigen Leerzeichen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 13. Feb 2009 13:20 
Schon einen Schritt weiter:
Code:
cat Datei.txt | sed -e 's/<desc>.*\&lt\;strong>/<desc>\ /'
Das Problem ist, das der Ziel-String &lt;strong> in der Zeile mehrfach vorkommt und sed die letzte Instanz nimmt, ich ihm aber beipulen muß, alles zwischen <desc> und dem ersten Auftauchen von &lt;strong> zu löschen, nicht zwischen <desc> und dem Letzten.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 15. Feb 2009 20:39 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Dein Problem lässt sich mit regulären Ausdrücken allein nur mit "non-greedy-quantifiers" lösen. Die kann sed meines Wissens aber nicht. In Tcl sieht das so aus:
Code:
#!/usr/bin/tclsh
regsub -all &#123;<desc>.*?<strong>&#125; &#91;read stdin&#93; &#123;&#125; OUTPUT
regsub -all &#123;</strong>.*?</desc>&#125; $OUTPUT &#123;&#125; OUTPUT
puts -nonewline $OUTPUT
.*? ist die "non-greedy"-Variante von .*, die immer das kleinste mögliche Match auswählt.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de