返回介绍

第10章 初级班毕业了

发布于 2024-01-20 21:40:46 字数 2007 浏览 0 评论 0 收藏 0

“Unix不会阻止用户干蠢事,因为那样也会妨碍用户做聪明的事儿。”——Doug Gwyn

恭喜你坚持到正则表达式初级班毕业。你不再是个初学者了,你已经接触了最常用的正则表达式语法。作为程序员,正则表达式会给你的工作提供更多的改善机会。

学习正则表达式为我节省了不少的时间。让我举个例子吧。

我在工作中经常要使用XSLT,经常要分析XML文件中的标签。

在上一章中我展示过一部分,但现在这里有个更长的单行命令,它从lorem.dita文件中提取一列标签名并转换为简单的XSLT样式表:

grep -Eo '<[_a-zA-Z][^>]*>' lorem.dita | sort | uniq | sed '1 i\
<xml:stylsheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\

; s/^</\
<xsl:template match=";s id=\".*\"/;s>$/">\
<xsl:apply-templates\/>\
<\/xsl:template>/;$ a\
\
</xsl:stylesheet>\
'

我知道这个脚本看起来很复杂,但你若长期使用这些东西之后,会培养出新的思维方式。我不打算解释这个脚本执行的操作了,因为我确信你可以自己弄明白。

该脚本的输出如下:

<xml:stylsheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="body">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="li">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="p">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="title">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="topic">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="ul">
<xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>

这只是个开头。当然,要让这个简单的样式表变得有用还需要做很多编辑工作,但这样可以让你少键入很多东西。

我承认如果在文件中用以下sed命令则会更简单。事实上,我就这样做了。你可以在示例代码库中找到xslt.sed文件。下面是该文件的内容:

#!/usr/bin/sed

1 i\
<xml:stylsheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\

s/^</\
<xsl:template match=";s id=\".*\"/;s>$/">\
<xsl:apply-templates\/>\
<\/xsl:template>/;$ a\
\
</xsl:stylesheet>\

然后这样运行它:

grep -Eo '<[_a-zA-Z][^>]*>' lorem.dita | sort | uniq | sed -f xslt.sed

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文