【发布时间】:2020-07-25 16:47:17
【问题描述】:
我有一个 html 文件,我想使用 bash 在大括号前插入一个美元符号,例如:
<h1>My name is {HOSTNAME}. <h1>
变成:
<h1>My name is ${HOSTNAME}. <h1>
到目前为止我的代码:
while read -r line; do
new_index=$(echo ${line} | sed '/^{/s/^/\$/') #the line to insert the $
echo $new_index
done < "web/index.html" #the file I'm reading from
但它似乎不起作用,为什么?
编辑:我将 bash 用于锻炼目的,而不是现实生活中的应用程序。
【问题讨论】:
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
我使用 bash 仅用于锻炼目的。
-
如果你想在脚下开枪:
while read -r line; do echo "${line/'{HOSTNAME}'/'${HOSTNAME}'}"; done < file.html -
@Cyrus 我不知道完整的上下文,但这实际上可能是不需要甚至不需要解析 HTML 的情况;可能替换应该独立于上下文 - 在 HTML 标题和正文中,在标记属性中,甚至可能在内联脚本中(但可能不在 CSS 中)。如果这是正确的,最好使用不尝试理解 HTML 结构的工具。