2016-04-11 56 views
-2

我寫了一個正則表達式代碼來從HTML文件中提取錨標籤並得到了這個輸出。如何解決這個sed語法問題

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> 

我必須代表輸出作爲

「文本顯示」使用sed的工具。

<a[\s]href=('|")([^>]+)">((?:.(?!\<\/a\>))*.)<\/a> 

這是我的正則表達式,它捕獲文本和href鏈接。

這裏是sed命令我寫

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

但是這給了我的錯誤。 有些人可以幫我嗎?

+0

你什麼錯誤?而期望的輸出是什麼樣子? – tink

+0

您正在嘗試使用某些不受sed或任何其他標準UNIX工具支持的regexp變體(可能是PCRE?idk)。發佈[mcve],我們可以幫助你。 –

+0

您不能在sed中使用非捕獲組'(?:)'。 –

回答

0

這不是一個正則表達式(或任何其他字符串操作工具)的工作。您需要能夠解析html的工具。使用xsltproc一個例子:

1)安裝xsltproc包(如果需要))收件描述如何變換HTML輸入該XSL文件: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)把你的原始文件或您的原始HTML內容中的一個變量(讓我們說「內容」),但不是mdlinks.txt(這一步是無用和greile鏈接的HTML內容是錯誤傾向和浪費時間(至少5小時你))和寫:

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

您獲得:

[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]) 

鏈接:http://scott.dd.com.au/wiki/XSLT_Tutorial

0

使用面向行的工具解析html通常會失敗。鑑於你的簡單佈局,你可以嘗試

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