Xmlstarlet和sed替换文件中的字符串

时间:2011-09-06 21:12:25

标签: sed xmlstarlet

我有大量的html文件。我需要分别替换所有的和“与html实体& nsbquo和& quto”。 我需要为此成功分两步: 1)找到

标签之间的所有文本。我只需要在

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

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

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

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

谢谢你, 迪夫亚。

1 个答案:

答案 0 :(得分:2)

这里的主要问题是,在XML中,& quot;之间没有区别。和“,所以你不能使用xmlstarlet直接执行此操作。你可以用一个特殊的字符串替换”然后用sed替换它与& quot;:

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中,因此在询问此问题时它不可用。