替换 HTML 标签 ID 中的任何内容
Replace anything inside a HTML tag ID
搜索了整个 Whosebug 和 Google,最接近的答案:
sed -i -e 's|<element id="lastupdate">\([0-9]\{0,\}\)</element>|<element id="lastupdate">'"$(date -d @${contents})"'</element>|g' /var/www/html/index.html
仅在标签内容为空时有效。如果已经更改,则不能再使用。
我们的想法是更改此标签 ID 内的任何内容,而不仅仅是当它为空时。
这里有一个关于使用 awk 读取标签 ID 内的任何内容的好答案:。但它仅适用于阅读(使用 awk)而不适用于 appending/replacing(使用 sed)。
另一个想法是不仅要有一种方法来替换:而且要有另一种方法,或者,附加到给定标签内的任何内容中。
是否可以使用适用于 HTML 的工具而不是适用于 XML 的工具?
尝试过:
输入:xmlstarlet ed --update '//element[@id="daipeg"]' --value 'new' index.html
输出:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Status - Floflis</title>
<link rel="shortcut icon" href="icon.ico" type="image/x-icon"/>
<link rel="icon" href="icon.ico" type="image/x-icon"/>
</head>
<body><h1>Floflis Status</h1><ul><li><p>Is DAI pegged to USD? <b><element id="daipeg">No</element></b></p></li><li><p>DAI now worth <b><element id="daiusd"/> USD</b></p></li></ul><p>Last updated in <element id="lastupdate"/> (updates every 5 minutes).</p><a href="https://floflis.github.io/" target="_blank">Main site</a> | <a href="https://floflis.github.io/blog" target="_blank">Blog</a> | <a href="https://floflis.github.io/docs" target="_blank">Documentation</a> | <a href="./api.html">DEV</a>
</body>
</html>
想要的结果:将<element id="daipeg">No</element>
里面的“No”改成“new”,直接进入index.html文件。
(响应xmlstarlet标签,我用的是1.6.1版本。)
如果您修复命名空间问题并添加 --inplace
选项,您
那里(替换 element
值):
test "${bettersorrythansafe}" || cp file.xhtml file.xhtml.was
xmlstarlet ed --inplace -N X='http://www.w3.org/1999/xhtml' \
--update '//X:element[@id="daipeg"]' --value 'new' file.xhtml
或者,使用简短选项和默认命名空间的快捷方式:
xmlstarlet ed -L -u '//_:element[@id="daipeg"]' -v 'new' file.xhtml
请注意 --inplace
选项在
xmlstarlet.txt
但不在 user's guide 中。
有关 _
命名空间快捷方式的更多信息,请参阅用户指南
ch. 5.
附加到值,例如:
xmlstarlet ed -L -N X='http://www.w3.org/1999/xhtml' \
--var peg '//X:element[@id="daipeg"]' \
--var res "$((3 * 7 * 2))" \
-u '$peg' -x 'concat($peg," and then ",$res)' file.xhtml
搜索了整个 Whosebug 和 Google,最接近的答案:
sed -i -e 's|<element id="lastupdate">\([0-9]\{0,\}\)</element>|<element id="lastupdate">'"$(date -d @${contents})"'</element>|g' /var/www/html/index.html
仅在标签内容为空时有效。如果已经更改,则不能再使用。
我们的想法是更改此标签 ID 内的任何内容,而不仅仅是当它为空时。
这里有一个关于使用 awk 读取标签 ID 内的任何内容的好答案:。但它仅适用于阅读(使用 awk)而不适用于 appending/replacing(使用 sed)。
另一个想法是不仅要有一种方法来替换:而且要有另一种方法,或者,附加到给定标签内的任何内容中。
是否可以使用适用于 HTML 的工具而不是适用于 XML 的工具? 尝试过:
输入:xmlstarlet ed --update '//element[@id="daipeg"]' --value 'new' index.html
输出:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Status - Floflis</title>
<link rel="shortcut icon" href="icon.ico" type="image/x-icon"/>
<link rel="icon" href="icon.ico" type="image/x-icon"/>
</head>
<body><h1>Floflis Status</h1><ul><li><p>Is DAI pegged to USD? <b><element id="daipeg">No</element></b></p></li><li><p>DAI now worth <b><element id="daiusd"/> USD</b></p></li></ul><p>Last updated in <element id="lastupdate"/> (updates every 5 minutes).</p><a href="https://floflis.github.io/" target="_blank">Main site</a> | <a href="https://floflis.github.io/blog" target="_blank">Blog</a> | <a href="https://floflis.github.io/docs" target="_blank">Documentation</a> | <a href="./api.html">DEV</a>
</body>
</html>
想要的结果:将<element id="daipeg">No</element>
里面的“No”改成“new”,直接进入index.html文件。
(响应xmlstarlet标签,我用的是1.6.1版本。)
如果您修复命名空间问题并添加 --inplace
选项,您
那里(替换 element
值):
test "${bettersorrythansafe}" || cp file.xhtml file.xhtml.was
xmlstarlet ed --inplace -N X='http://www.w3.org/1999/xhtml' \
--update '//X:element[@id="daipeg"]' --value 'new' file.xhtml
或者,使用简短选项和默认命名空间的快捷方式:
xmlstarlet ed -L -u '//_:element[@id="daipeg"]' -v 'new' file.xhtml
请注意 --inplace
选项在
xmlstarlet.txt
但不在 user's guide 中。
有关 _
命名空间快捷方式的更多信息,请参阅用户指南
ch. 5.
附加到值,例如:
xmlstarlet ed -L -N X='http://www.w3.org/1999/xhtml' \
--var peg '//X:element[@id="daipeg"]' \
--var res "$((3 * 7 * 2))" \
-u '$peg' -x 'concat($peg," and then ",$res)' file.xhtml