[linux] Re: regex vraagje

Daniel von Asmuth asmuth op bakunin.xs4all.nl
Wo Feb 8 20:59:35 CET 2006


On Wed, Feb 08, 2006 at 06:01:55PM +0100, Jelle Boomstra wrote:
> On Wednesday 08 February 2006 17:44, asmuth op bakunin.xs4all.nl wrote:
> > > Mag ik jullie even storen voor een regular expressions gerelateerde
> > > vraag? ik heb een file met links die ik uit een set html heb gegrept. Dat
> > > ziet er ongeveer zo uit:  rommel* <a href="/links/die/ik/wil" name="niet
> > > interessant">de linktekst</a> meer niet interesaante rommel hier met
> > > <tags>
> > > en "quotes"
> > >
> > > dat wil ik omvormen naar een lijstje met op elke regel
> > > /links/die/ik/wil |de linktekst
> >
> > Probeer eens iets in de trant van
> >
> > sed -n <linkejes..html -e '
> > /.*<[aA][[:space:]]\+[hH][rR][eE][fF][[:space:]]*=[[:space:]]*"\(.*\)".*>\(
> >.*\)<\/[aA]>/ {
> > s//\1 \t\| \2/
> > p }'
> >
> 
> Dankjewel, daar kwam al iets heel bruikbaars uit. blijkt gelijk hoe onprecies 
> html is, veel links hebben nog wat tabel structuur ingebed zitten. En hij 
> gaat nog fout op links waar een name="iets" attribuut bij zit. 

Dat valt wel mee, maar je moet een goede parser schrijven i.p.v. met een
eenvoudige reguliere expressie te knoeien.

Misschien dat de volgende variant beter is:
 sed -n <linkjes.html -e '
/.*<[aA][[:space:]]\+[hH][rR][eE][fF][[:space:]]*=[[:space:]]*"\([-a-zA-Z0-9.:/~%]\+\)".*>\(.*\)<\/[aA]>/{
s//\1 \t\| \2/
p }'

(hierin heb ik de meest voorkomende tekens in een URL expliciet vermeld)

Suc6,



Daniel


-- 
      _----_
     /      >
    < intel/
     \      Lag behind
      \____/ 



More information about the Linux mailing list