sed - 如何在文件中匹配的模式之前插入文本

时间:2018-06-04 03:54:27

标签: regex string shell sed replace

我有一个文件a.html,其内容如下所示

<script src="one.sample.js"/>
<script src="two.sample.js"/>
<script src="three.sample.js"/>

我想修改上面的内容,如

<script src="/web/test/src/one.sample.js"/>
<script src="/web/test/src/one.sample.js"/>
<script src="/web/test/src/one.sample.js"/>

如何使用sed?

一次性替换所有出现的通用模式

1 个答案:

答案 0 :(得分:0)

输入:

$ more a.html 
<body>
        <script src="one.sample.js" />
        <script src="two.sample.js" />
        <script src="three.sample.js" />
</body>

<强>转型:

$ more htmlScriptConvertor.xslt m
::::::::::::::
htmlScriptConvertor.xslt
::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="//script[@src]">
        <script src="{concat('/web/test/src/',@src)}"></script>
    </xsl:template>

</xsl:stylesheet>

如果您需要将转换限制为javascript脚本,这将复制除包含src属性的脚本节点以外的所有内容(您可以添加属性值必须以.js结尾的约束)

<强>输出:

$ xsltproc --html htmlScriptConvertor.xslt a.html
<?xml version="1.0"?>
<html>
  <body>
    <script src="/web/test/src/one.sample.js"/>
    <script src="/web/test/src/two.sample.js"/>
    <script src="/web/test/src/three.sample.js"/>
  </body>
</html>

重定向并将其保存到a_new.html