对于bash脚本来说我是全新的,请原谅我.... 我试图将一些html内容与包含标准标题的模板结合起来,模板有一个占位符" REPLACEME"我认为我可以找到并替换它。循环只是重复对目录中所有文件的操作。
REPLACEME="REPLACEME"
for file in *.html
do
TEMPLATE=$(<../template/template.html)
CONTENT=$(<$file)
OUTPUT="${TEMPLATE/"$REPLACEME"/"$CONTENT"}"
echo $OUTPUT > ../compiled/$file
done
这样可行,但生成的html文件已经被删除了新的行字符,这使它看起来像垃圾!有人可以帮忙吗?
答案 0 :(得分:3)
替换:
echo $OUTPUT > ../compiled/$file
使用:
echo "$OUTPUT" > ../compiled/$file
shell对未加引号的变量执行分词。使用IFS
的默认值,这意味着所有包含制表符和换行符的空白序列都将替换为一个空格。为防止这种情况,请将变量放在双引号中,如上所示。
答案 1 :(得分:3)
使用sed
你可以像下面这样实现它:
sed -i 's/REPLACEME/new_text/g' /path/to/your/template.html
sed中的-i
选项适用于inplace edit&amp; g
选项用于全局替换。
修改1:
如果您需要在sed
内使用变量,可以这样做
var="Sometext";
sed -i "s/REPLACEME/$var/g" /path/to/your/template.html
请注意这里的双引号,它会使shell扩展变量。
如果您的系统支持gnu-awk(gawk
),您可以通过以下方式实现上述目标
gawk '
{
$0=gensub(/REPLACEME/"NEWTEXT","g",$0)
printf "%s\n", $0
}' < /path/to/your/template.html > newtemplate.html && mv newtemplate.html template.html