首页 > 解决方案 > 如何使用 bash 脚本搜索和替换 html 代码?

问题描述

我需要创建一个脚本来处理几个 html 文件来转换这些类型的行:

<link rel="stylesheet" href="assets/css/main.css">

..进入这个:

{stylesheets file='assets/css/main.css'}
        <link rel="stylesheet" href="{$asset_url}">
{/stylesheets}

我还需要以相同的方式转换 html 文件中的 javascript 代码。这个:

<script type="text/javascript" src="vendor/revolution/revolution.extension.migration.min.js"></script>

..进入这个:

{javascripts file='vendor/revolution/revolution.extension.migration.min.js'}
    <script src="{$asset_url}"></script>
{/javascripts}

我知道一些使用正则表达式的 bash 基本技巧,例如搜索和替换,但我没有足够的知识单独做这件事。

非常感谢您的帮助。

先感谢您。

编辑

链接和脚本总是位于一行,但它们的参数并不总是相同的顺序。

如果regex 似乎对 html来说不是一个好主意,你建议我使用哪个工具?

标签: regexshell

解决方案


用正则表达式解析 HTML 不是一个好主意,但是这个丑陋且极有可能失败的 sed 命令可能有机会

sed \
-e 's/\(<link rel="stylesheet" href="\)\([^"]\+\)\(">\)/\n{stylesheets file='\''\2'\''}\n\t\1${asset_url}\3\n{\/stylesheets}\n/g' \
-e 's/\(<script \)type="text\/javascript" \(src="\)\([^"]\+\)\("><\/script>\)/\n{javascripts file='\''\3'\''}\n\t\1\2{$asset_url}\4\n{\/javascripts}\n/g' \
<input_file>

推荐阅读