我将如何删除锚标记,但将锚文本保留在Bash中?所以我想删除除了文字示例以外的所有内容。删除锚标记,但保持锚文本
<a href="http://example.com">Example text</a>
所以,如果我做的:
echo '<a href="http://example.com">Example text</a>' | sed -e 's/<[^>]*>//g'
,去除所有的HTML。我正在寻找删除只是锚标记,但也保留锚文本...在这种情况下的示例文本。
我将如何删除锚标记,但将锚文本保留在Bash中?所以我想删除除了文字示例以外的所有内容。删除锚标记,但保持锚文本
<a href="http://example.com">Example text</a>
所以,如果我做的:
echo '<a href="http://example.com">Example text</a>' | sed -e 's/<[^>]*>//g'
,去除所有的HTML。我正在寻找删除只是锚标记,但也保留锚文本...在这种情况下的示例文本。
你可以使用下面的命令:
$ echo '<a href="http://example.com">Example text</a>' | sed -e 's/<[^>]*>//g'
Example text
,或者,你也可以因为non greedy则表达式中使用perl
代替sed
将是有益的位置:
$ echo '<a href="http://example.com">Example text</a>' | perl -pe 's/\<.*?\>//g'
Example text
注意:使用解析HTML的正则表达式是discouraged,但对于这个小任务,我认为可以坚持使用命令行中提供的工具。
编辑:只删除锚点标记,你可以使用正则表达式可以更新如下:
sed -e 's/<\/\?a\s*[^>]*>//g'
这里是一个有益的指导: http://www.eng.cam.ac.uk/help/tpl/unix/sed.html
如果你的输入结构良好,你可以从命令行使用XSLT。 (我建议Saxon,但Xalan将是确定。):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
另见RegEx match open tags except XHTML self-contained tags :-)
我期待用sed只删除锚点标记并不是所有的标签。那可能吗? – user983223 2012-02-07 20:52:14
@ user983223是的,我已经更新了我的答案。 – jcollado 2012-02-07 20:55:24
删除锚标记不起作用......它仍然显示我最初回应的所有内容。 – user983223 2012-02-07 22:37:43