2016-04-11 15 views
-2

Bir html dosyasından çapa etiketlerini ayıklamak için bir regex kodu yazdım ve bu çıktıyı aldım.Bu sed sözdizimi sorunu nasıl çözülür

mdlinks.txt 
    <a href='/aspnet/aspnet_refhtmlcontrols.asp'>ASP.NET Reference</a> 
    <a href='/aspnet/webpages_ref_classes.asp'>Razor Reference</a> 
    <a href='/html/html_examples.asp'>HTML Examples</a> 
    <a href='/css/css_examples.asp'>CSS Examples</a> 
    <a href='/w3css/w3css_examples.asp'>W3.CSS Examples</a> 
    <a href="/js/js_examples.asp" target="_top">JavaScript Examples</a> 
    <a href="/js/js_dom_examples.asp" target="_top">HTML DOM Examples</a> 

ben sed aracını kullanarak "görüntülenecek metin"

olarak çıktı temsil etmek zorunda.

Bu, metin ve href bağlantısını yakalayan benim düzenli ifademdir.

İşte ben

sed -E "s/\"<a[\s]href=('|\")([^>]+)\">((?:.(?!\<\/a\>))*.)<\/a>\"/\[\2\] \(\1\)/" mdlinks.txt 

yazdı sed komutu Ama bu bana hata veriyor. Lütfen biraz yardımcı olabilir misiniz? Html'yi satır yönelimli araçlarla ayrıştırma normalde başarısız olur.

+0

Hangi hata alıyorum? Ve istenen çıktı neye benziyor? – tink

+0

Sed veya başka bir standart UNIX aracı tarafından desteklenmeyen bazı regexp değişkenlerini kullanmaya çalışıyorsunuz (belki de bir PCRE? Idk). [Mcve] yayınlayın, size yardımcı olabiliriz. –

+0

Yakalamayan grupları '(?:)' Sed ile kullanamazsınız. –

cevap

0

deneyebilirsiniz. Html'yi ayrıştırabilecek araçlara ihtiyacınız var. xsltproc kullanıldığı bir örnek:

1) gerekirse (xsltproc paketini yüklemek)

2) html girişi dönüşümü açıklar bu xsl dosyası yaz: stylesheet.xsl

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version= "1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:template match="//a">[<xsl:value-of select="text()"/>] (<xsl:value-of select="@href"/>)</xsl:template> 
</xsl:stylesheet> 

3) atın senin orijinal dosya veya bir değişken içinde orijinal html içeriğiniz ("CONTENT" diyelim), ama mdlinks.txt değil (bu adım html içeriğinde işe yaramaz ve greping bağlantıları hataya açık ve zaman kaybı (en az 5 saat) sen) yazıp yaz:

xsltproc --html --novalid stylesheet.xsl <(echo "$CONTENT") 

edinilmesinin:

[Google.com] (http://google.com) 
[An Example] (http://example.com/files.html) 
[File #23] (file23.html) 
[See my picture!] (images/mypic.png) 
[Email Joel] (mailto:[email protected]) 

Bağlantı: http://scott.dd.com.au/wiki/XSLT_Tutorial

0

sizin basit düzen göz önüne alındığında, bu regex için bir iş (veya başka bir dize manipülasyon aracı) değil

tr -s "<" ">" < mdlinks.txt | cut -d">" -f3