shell脚本用另一个文件的内容替换文件中的关键字

shell脚本用另一个文件的内容替换文件中的关键字

我要创建一个 .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。(来源:此主题

相关内容