使用echo和sed后空行丢失

时间:2016-12-01 17:02:05

标签: bash shell

我编写了一个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)

注意末尾有空白行。这些数字仅用于显示空行

1 个答案:

答案 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表示在适当的位置编辑文件,因此不需要临时文件。