PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sed problemchen



Jörn
07-11-2006, 16:47
Hi,

ich lass mir gerne mal mit sed die links aus html-dokumenten raussuchen.
funktioniert auch soweit, nur wenn 2x in der selben zeile links stehen wird nur der hintere ausgegeben. wie kann ich das korrigieren?


sed -n -e 's/\(^.*<a href="\)\([^"]\)\(".*$\)/\2/gp'

roli
07-11-2006, 17:09
Habe es noch nicht vollständig angesehen, aber dein
.* "frisst" alles bis zum letzten
<a href= auf

peschmae
07-11-2006, 17:12
Dein Ausdruck funktioniert bei mir irgendwie nicht, und einen ganz neuen Basteln mag ich gerade nicht ;)

Grundsätzlich ist das Problem wohl dass Sed Regexps "greedy" sind - d.h. jeweils so viel wie möglich der Zeile matchen.
Eine Lösung dazu wäre z.B. dass du zuerst sicherstellst das alle links auf eigenen Zeilen stehen - z.B. indem du Leerzeichen durch Zeilenumbrüche ersetzt. Oder zumindest die </a> durch ein </a> mit darauffolgendem Umbruch ersetzen.

MfG Peschmä

Jörn
07-11-2006, 17:27
sed -n -e 's/\(^.*<a href="\)\([^"]*\)\(".*$\)/\2/gp'
Hatte den * vergessen, das mit dem ersätzen versuche ich mal hinzubekommen.

EDIT:
Ich habe das Script nun so modifiziert, dass er mir den Inhalt des A-Elements ausgibt. Allerdings geht das nur solange es in der selben Zeile steht. Also habe ich versucht den Zeilenumbruch nach dem Starttag des A-Elementes rauszunehmen, so dass Starttag und Inhalt in einer Zeile stehen, allerdings gelingt mir das nicht.
Ich habe es mit sed versucht, aber da passiert gar nichts...

sed 's/>\n/>/g'

liegt das daran, dass sed Zeilenweise vorgeht?

Jörn
09-11-2006, 18:44
Ok, ich bin nu zu Potte gekommen.
Nur ein einziges Problem habe ich noch.

Wenn ich mein Kommando gleich ausgeben wurde, zeigt er jeden Link untereinander (also mit \n) an. Wenn ich allerdings die Ausgabe in eine Variable speicher und diese danach ausgebe ist es insgesamt eine Zeile. Woran liegt das und wie kann ich das behaben?