我有大量的html文件。我需要分别替换所有的和“与html实体& nsbquo和& quto”。 我需要为此成功分两步: 1)找到
标签之间的所有文本。我只需要在
标签之间替换此文本。 2)使用sed替换所有必需的字符串
我的命令是: xmlstarlet sel -t -v“* // p”“index.html”| sed's /,/ \& nsbquo /'
这有效,但现在我不知道如何将更改放回index.html文件。 在sed中我们有-i选项,但为此我需要使用sed命令指定文件名。但就我而言,我必须使用|从html文件中过滤掉所需的字符串。
请帮忙。我从2天开始做了很多搜索,但没有运气。
谢谢你, 迪夫亚。
答案 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@/\"\;/g' > quote-new.html
mv quote-new.html quote.html
注意:str:replace和其他exslt函数仅添加到版本1.3.0中的xmlstarlet中,因此在询问此问题时它不可用。