Sed将index.html中的值替换为带有斜杠的环境变量,以保持封闭文本的完整



我有基本的html,例如:

<html>
<head>
<title>My App</title>
</head>
<body>
<div id="app"></div>
<script>window.API_URL = ''</script>
</body>
</html>

我需要用环境变量替换"。Env变量将包含斜杠(例如:https://website.com/api

)我试图使用以下代码,但它只是输出$MY_API_URL而不是实际值和</script>文本被删除:

cat index.html | sed -i -e '/window.API_URL =/ s/= .*/= "${MY_API_URL}";/' index.html 

给定MY_API_URL=https://somesite.com,我期望得到<script>window.API_URL = "https://somesite.com";</script>

可以使用

sed -i 's/(window.API_URL =)[^<]*/1 "'"${MY_API_URL////\/}"'";/' index.html

查看在线演示

细节:

  • (window.API_URL =)[^<]*-一个POSIX BRE模式,匹配并捕获到组1window.API_URL =文本,然后匹配除<以外的任何零或多个字符
  • 1 "'"${MY_API_URL////\/}"'";-将捕获的值放回组1 (1),然后添加一个空格,",MY_API_URL值,然后";字符串。

${MY_API_URL////\/}是一个变量扩展的例子,其中/被替换为/(多亏了变量名后面的//,所有的出现都被替换了)。

最新更新