Bash字符串操作不需要删除换行符

时间:2016-05-03 00:43:24

标签: bash shell scripting

对于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文件已经被删除了新的行字符,这使它看起来像垃圾!有人可以帮忙吗?

2 个答案:

答案 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