【问题标题】:Xmlstarlet and sed to replace string in a fileXmlstarlet 和 sed 替换文件中的字符串
【发布时间】:2011-09-06 21:12:25
【问题描述】:

我有大量的 html 文件。我需要分别用 html 实体 &nsbquo 和 &quto 替换所有 , 和 "。 为此,我需要通过两个步骤取得成功: 1) 查找

之间的所有文本

标签。我只需要在

标记之间替换此文本。 2) 使用 sed 替换所有必需的字符串

我的命令是: xmlstarlet sel -t -v "*//p" "index.html" | sed 's/,/\&nsbquo/'

这可行,但现在我不知道如何将更改放回 index.html 文件。 在 sed 我们有 -i 选项,但为此我需要使用 sed 命令指定文件名。但就我而言,我必须使用 |从 html 文件中过滤掉所需的字符串。

请帮忙。从 2 天开始,我做了很多搜索,但没有运气。

谢谢你, 迪维亚。

【问题讨论】:

  • 我不是 xmlstartlet 用户,但我找到了这个链接。 stackoverflow.com/questions/5803903/… 。您需要 xmlstartlet 中的“更新”功能。看起来它可能会为您指明正确的方向。祝你好运。

标签: sed xmlstarlet


【解决方案1】:

这里的主要问题是,在 XML 中," 之间没有区别。和 ",所以你不能直接使用 xmlstarlet 来执行此操作。你可以将 " 替换为特殊字符串,然后使用 sed 将其替换为 ":

xmlstarlet ed -u "//p/text()" \
    -x "str:replace(str:replace(., ',', '@NSBQUO@'), '\"', '@QUOT@')" \
    quote.html | \
  sed 's/@NSBQUO@/\&nsbquo\;/g; s/@QUOT@/\&quot\;/g' > quote-new.html
mv quote-new.html quote.html

注意:str:replace 和其他 exslt 函数仅在 1.3.0 版中添加到 xmlstarlet ed,因此在提出此问题时不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2020-03-13
    • 2022-01-17
    • 2011-10-03
    相关资源
    最近更新 更多