Bash的字符串操作不需要删除换行符(Bash string operations unwanted

2019-09-27 02:35发布

我完全新打坏脚本所以原谅我....我尝试一些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文件已被去除的换行符,这使得它看起来像垃圾! 任何人都可以帮忙吗?

Answer 1:

更换:

echo $OUTPUT > ../compiled/$file

附:

echo "$OUTPUT" > ../compiled/$file

外壳上执行不带引号的变量分词 。 与默认值IFS ,这意味着空白,其包括翼片和换行符的所有序列,与单个坯件代替。 为了防止这种情况,把变量双引号,如上图所示。



Answer 2:

使用sed ,你可以实现它象下面这样:

sed -i 's/REPLACEME/new_text/g' /path/to/your/template.html

-i在sed选项是就地编辑与该g选项是全局替换。

编辑1:

如果您需要使用内部变量sed ,你可以这样来做

var="Sometext";
sed -i "s/REPLACEME/$var/g" /path/to/your/template.html

这里介意双引号,它使外壳扩展变量。


如果您的系统支持的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


文章来源: Bash string operations unwanted remove new line characters