Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
sed/perl Ausdruck gesucht

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fulter
Gast





BeitragVerfasst am: 13. Feb 2009 11:35   Titel: sed/perl Ausdruck gesucht

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
 

Fulter
Gast





BeitragVerfasst am: 13. Feb 2009 11:48   Titel:

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.
 

Fulter
Gast





BeitragVerfasst am: 13. Feb 2009 13:20   Titel:

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.
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 15. Feb 2009 20:39   Titel:

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 {<desc>.*?<strong>} [read stdin] {} OUTPUT
regsub -all {</strong>.*?</desc>} $OUTPUT {} 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.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy