Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)
Posted
技术标签:
【中文标题】Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)【英文标题】:Sed - find and replace text in html code (from one language to another) 【发布时间】: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 感知工具?如果是这样,请用那些标记您的问题以获得可靠的答案。 【参考方案1】:我想再创建一个语言版本。
这称为Internationalization 或简称为 i18n。
我认为最好的方法是使用 sed。
最好是主观的,如果你不严格限制在 sed 和 AWK 我建议尝试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”。
【讨论】:
想想如果公司名称改为TwoBrothers
或One Sunday
而不是Empresa
会怎样。这种方法非常脆弱。
@t 参数呢?它改变了什么?例如 sed 's/The Company/Empresa/g;t;以上是关于Sed - 查找和替换 html 代码中的文本(从一种语言到另一种语言)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本