1

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

标签。我只需要在此文本之间替换

标签。2) 使用 sed 替换所有必需的字符串

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

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

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

谢谢你,迪维亚。

4

1 回答 1

2

这里的主要问题是,在 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,因此在提出此问题时不可用。

于 2011-10-08T15:04:09.600 回答