我编写了一个shell脚本来替换属性文件中的一些属性。但是在运行脚本之后,在替换之前文件末尾没有空行。
file=my_file.properties
file_content=$(cat $file | sed "s@a=.*@a=b@g") #making a=b
file_content=$(echo "${file_content}" | sed "s@x=.*@x=y@g") #making x=y
echo "${file_content}" > $file
my_file.properties类似于
1)a=v
2)b=c
3)x=b
4)
注意末尾有空白行。这些数字仅用于显示空行
答案 0 :(得分:1)
从the Bash manual引用$(…)
Command Substitution(强调我的):
Bash通过在子shell环境中执行命令并使用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。
因此,不应将命令的输出捕获到变量中,而应将它们捕获到临时文件中:
sed "s@a=.*@a=b@g" $file | sed "s@x=.*@x=y@g" > tmp.tmp
mv tmp.tmp $file
或者如果您使用的是GNU sed,可以在一行中完成:
sed -i -e "s@a=.*@a=b@g" -e "s@x=.*@x=y@g" $file
-i
表示在适当的位置编辑文件,因此不需要临时文件。