【问题标题】:insert a dollar sign before a specific character在特定字符前插入美元符号
【发布时间】: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 &lt; file.html
  • @Cyrus 我不知道完整的上下文,但这实际上可能是不需要甚至不需要解析 HTML 的情况;可能替换应该独立于上下文 - 在 HTML 标题和正文中,在标记属性中,甚至可能在内联脚本中(但可能不在 CSS 中)。如果这是正确的,最好使用不尝试理解 HTML 结构的工具。

标签: html regex bash sed


【解决方案1】:

使用带有-i 标志的sed 来编辑文件。

sed -i 's/{/\${/g' index.html

【讨论】:

  • GNU sed 可以正常工作,但请注意,您不需要在替换中转义美元符号,如果可移植性很重要,实际上也不应该转义它,因为根据POSIX standard,结果未指定。
  • 如果已经有$,你可能不想添加,所以:sed -i 's/\([^$]\){/\1${/g'
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多