我要创建一个 .sh,使用另一个文件的内容替换文件中的特定关键字。
- template.html 包含一个唯一的字符串“占位符“
- 它必须被文件“contents.html”的内容替换
可以使用 Sed 来替换关键字:
value="hello superuser"
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
因此我尝试了以下方法:
value=$(<contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
并收到以下错误消息:替代模式内未转义的换行符
请问这种情况该如何处理?
谢谢!
答案1
使用 bash,你可以写:
templ=$(<template.html)
value=$(<contents.html)
echo "${templ//__PLACEHOLDER__/$value}" > page.html
答案2
这是因为“contents.html”包含多行,并且换行符必须先转换为\n
才能输入sed
。
例如,如果“contents.html”包含
Line 1
Line 2
Line 3
在将其用作替代模式之前,您需要将其更改为“Line 1\nLine2\nLine3”。
我将您的脚本更改为:
value=$(sed ':a;N;$!ba;s/\n/\\n/g' contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
第一行内容为“contents.html”,并将换行符替换为\n
。(来源:此主题)