我有基本的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////\/}
是一个变量扩展的例子,其中/
被替换为/
(多亏了变量名后面的//
,所有的出现都被替换了)。