我编写了一个正则表达式代码,用于从html文件中提取锚标记并获得此输出。
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>
我必须将输出表示为
&#34;要显示的文字&#34;使用sed工具。
<a[\s]href=('|")([^>]+)">((?:.(?!\<\/a\>))*.)<\/a>
这是我的正则表达式,它捕获文本和href链接。
这是我写的sed命令
sed -E "s/\"<a[\s]href=('|\")([^>]+)\">((?:.(?!\<\/a\>))*.)<\/a>\"/\[\2\] \(\1\)/" mdlinks.txt
但这给了我错误。 有人可以帮帮我吗?
答案 0 :(得分:0)
使用面向行的工具解析html通常会失败。鉴于您的简单布局,您可以尝试
tr -s "<" ">" < mdlinks.txt | cut -d">" -f3
答案 1 :(得分:0)
这不是正则表达式(或任何其他字符串操作工具)的工作。您需要能够解析html的工具。使用xsltproc
的示例:
1)安装xsltproc
包(如果需要)
2)编写此xsl文件,描述如何转换html输入: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内容放在变量中(让我们说&#34; CONTENT&#34;),但不是mdlinks.txt(此步骤无用且在html内容中使用greping链接容易出错,浪费时间(至少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:joelross@uw.edu)