[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: sed und Asterisk


On Wed, Aug 23, 2006 at 06:03:15PM +0200, Markus Bucher wrote:
> 	sed 's/<font*>//g' html_datei.html > neue_datei.html
> und
> 	sed 's/<\/font>//g' html_datei.html > neue_datei.html
> saemtliche font-tags zu entfernen. Leider scheint hier der Asterisk * nicht
> zu funktionieren. 

Regular Expressions sind keine "Wildcards" und umgekehrt. Der * hat hier
die Bedeutung von "vorangegangener Ausdruck beliebig haeufig"

Probiers mal (ungetestet) mit:

sed -e 's,<font[^>]*>,,g' < eingabe.html > ausgabe.html

In Worten ausgedrueckt: Ersetze "<font" gefolgt von einem beliebigen
Zeichen ausser ">" gefolgt von ">" durch ""

Viele wuerden dort einfach ".*" verwenden, was fuer "beliebiges Zeichen
(.) beliebig oft (*)" steht. Das ist aber zu "gefraessig", denn das wuerde
auch das ">" mit"fressen". 

[] Beschreibt eine sogenannte Zeichenklasse, d.h. benannte Zeichen (zB
[abcxyz]) oder Zeichenbereiche (zB [a-z]). Literale "-" in einer
Zeichenklasse muessen hinten stehen, also zB "[A-Za-z0-9_+;:,-]"

Das "^" am Beginn der Zeichenklasse negiert die Aussage.

[^>] Beschreibt also "beliebiges Zeichen ausser >", [^>]* entsprechend
dann "beliebig viele Zeichen ungleich >"

Das "^" hat ausserhalb von Zeichenklassen die Bedeutung "Zeilenanfang",
was keinesfalls verwechselt werden darf.

Uebrigens: Eine sehr gute Sammlung von sed-Anwendungsbeispielen ist unter
http://sed.sourceforge.net/sed1line.txt zu finden. 

Tiefgehendes Wissen zu Regular Expressions, verschiedene "Maschinen" etc
behandelt die entsprechende Literatur, z.B.
* http://www.oreilly.de/catalog/regex2ger/index.html
* http://www.oreilly.de/catalog/regexpprger/index.html
... oder die englischsprachigen Versionen davon.

Ich hab die erste Auflage und werde die mal zum Stammtisch heute abend
mitbringen, verleih ich gerne mal zum "reinschnuppern". 

Uebrigens: gerade bei html oder Verzeichnissen kommt ziemlich haeufig "/"
literal vor. sed versteht auch andere Trennzeichen, ich verwende z.B.
gerne das Komma als Trennzeichen. Andere beliebte Zeichen sind ":" oder
"|". Grundsaetzlich ist es lesbarer, wenn man auf "\" verzichten kann,
zumal dieses Zeichen auch "obendrueber" interpretiert wird, z.B. von der
ausfuehrenden Shell, wenn man sie laesst.

MfG
-- 
Raphael Becker                                    http://rabe.uugrn.org/
                      http://schnitzelmitkartoffelsalat.und.rahmspin.at/
.........|.........|.........|.........|.........|.........|.........|..



-- 
http://mailman.uugrn.org/mailman/listinfo/uugrn