【问题标题】:Sed - find and replace text in html code (from one language to another)Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)
【发布时间】:2021-11-25 00:33:36
【问题描述】:

我有英文版的 html 文件 index.html。 我想再创建一个语言版本。我认为最好的方法是使用 sed。所以我想自动将语言版本更改为另一种语言版本并使用 sed 将其保存在新文件中。

例如我的索引:

    <section class="p-b-10">
    <div class="container">
    <div class="row">
    <div class="col-lg-6">
    <div class="heading-text heading-section">
    <h2>THE COMPANY</h2>
    <span class="lead">The most happiest eu, sodales vel dolor. </span>
    </div>
    </div>
    <div class="col-lg-6 m-t-60">
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="100" data-delay="100" data-type="%">
    <div class="progress-title">One Sun   </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="94" data-delay="200" data-type="%">
    <div class="progress-title">Two    </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="78" data-delay="300" data-type="%">
    <div class="progress-title">JQUERY    </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="65" data-delay="400" data-type="%">
    <div class="progress-title">Three | ok   </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="65" data-delay="400" data-type="%">
    <div class="progress-title">Three    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </section>

Sed 应该在我的整个代码中查找并替换所有给定的英语单词以西班牙语。

公司(取代)Empresa

一个太阳(替换为)Uno Sol

两个(替换为)Dos

三个 |好的(替换为) Tres |好的

所以应该如下所示:

    <section class="p-b-10">
    <div class="container">
    <div class="row">
    <div class="col-lg-6">
    <div class="heading-text heading-section">
    <h2>Empresa    </h2>
    <span class="lead">The most happiest eu, sodales vel dolor.     
    </span>
    </div>
    </div>
    <div class="col-lg-6 m-t-60">
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="100" data-type="%">
    <div class="progress-title">Uno Sol       </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="94" data-type="%">
    <div class="progress-title">Dos    </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="78" data-type="%">
    <div class="progress-title">JQUERY    </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="65" data-type="%">
    <div class="progress-title">Tres | ok       </div>
    </div>
    </div>
    <div class="p-progress-bar-container title-up small color">
    <div class="p-progress-bar" data-percent="65" data-type="%">
    <div class="progress-title">Three    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </section>

请帮忙! 谢谢你

【问题讨论】:

  • 您是否可以访问 xmllint 或 xmlstarlet 等 xml 感知工具?如果是这样,请用那些标记您的问题以获得可靠的答案。

标签: bash awk sed replace


【解决方案1】:

我想再创建一个语言版本。

这称为Internationalization 或简称为 i18n。

我认为最好的方法是使用 sed。

最好是主观的,如果你不严格限制在 sedAWK 我建议尝试GNU gettext,因为它是为了提供 i18n。您需要更多时间才能开始,但从长远来看,您可能会获得更可靠的解决方案。

【讨论】:

    【解决方案2】:

    您可以根据提供的示例数据尝试此sed

    sed -Ee '/h2/{s/(.*>).*(<.*)/\1Empresa\2/}' \
    -e '/div class="progress-title"/{s/(.*>.?*)One Sun(.?*<.*)/\1Uno Sol\2/}' \
    -e '/div class="progress-title"/{s/(.*>.?*)Two(.?*<.*)/\1Dos\2/}' \
    -e '/div class="progress-title"/{s/(.*>.?*)Three \| ok(.?*<.*)/\1Tres | ok\2/};' input_file
    

    这将在匹配内容之前尝试匹配标签,同时考虑到标签内可能还有更多数据,而只针对要更改的单词。

    或者作为一个班轮

    sed -E '/h2/{s/(.*>).*(<.*)/\1Empresa\2/};/div class="progress-title"/{s/(.*>.?*)One Sun(.?*<.*)/\1Uno Sol\2/}; /div class="progress-title"/{s/(.*>.?*)Two(.?*<.*)/\1Dos\2/};/div class="progress-title"/{s/(.*>.?*)Three \| ok(.?*<.*)/\1Tres | ok\2/};' input_file
    

    输出

    <section class="p-b-10">
        <div class="container">
        <div class="row">
        <div class="col-lg-6">
        <div class="heading-text heading-section">
        <h2>Empresa</h2>
        <span class="lead">The most happiest eu, sodales vel dolor. </span>
        </div>
        </div>
        <div class="col-lg-6 m-t-60">
        <div class="p-progress-bar-container title-up small color">
        <div class="p-progress-bar" data-percent="100" data-delay="100" data-type="%">
        <div class="progress-title">Uno Sol   </div>
        </div>
        </div>
        <div class="p-progress-bar-container title-up small color">
        <div class="p-progress-bar" data-percent="94" data-delay="200" data-type="%">
        <div class="progress-title">Dos    </div>
        </div>
        </div>
        <div class="p-progress-bar-container title-up small color">
        <div class="p-progress-bar" data-percent="78" data-delay="300" data-type="%">
        <div class="progress-title">JQUERY    </div>
        </div>
        </div>
        <div class="p-progress-bar-container title-up small color">
        <div class="p-progress-bar" data-percent="65" data-delay="400" data-type="%">
        <div class="progress-title">Tres | ok   </div>
        </div>
        </div>
        <div class="p-progress-bar-container title-up small color">
        <div class="p-progress-bar" data-percent="65" data-delay="400" data-type="%">
        <div class="progress-title">Three    </div>
        </div>
        </div>
        </div>
        </div>
        </div>
        </section>
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用 sed:s/FIND/REPLACE/g 如果要运行多个 sed 命令,请使用 ; 运算符:

      sed 's/The Company/Empresa/g; s/One Sun/Uno Sol/g; s/Two/Dos/g; s/Three | ok/Tres | ok/g' $YOUR_FILE > spanish.html
      

      如果您不想替换所有单词而只替换第一个匹配项,请删除“g”。

      【讨论】:

      • 想想如果公司名称改为TwoBrothersOne Sunday 而不是Empresa 会怎样。这种方法非常脆弱。
      • @t 参数呢?它改变了什么?例如 sed 's/The Company/Empresa/g;t;
      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      相关资源
      最近更新 更多