2016-12-01 3 views
0

プロパティファイルのいくつかのプロパティを置き換える1つのシェルスクリプトを作成しました。スクリプトの実行後、置換前に存在していたファイルの最後に空白行はありません。echoとsedを使用した後に空行がありません

file=my_file.properties 
file_content=$(cat $file | sed "[email protected]=.*@[email protected]") #making a=b 
file_content=$(echo "${file_content}" | sed "[email protected]=.*@[email protected]") #making x=y 
echo "${file_content}" > $file 

my_file.propertiesは、空白行がend.These数字であり

1)a=v 
2)b=c 
3)x=b 
4) 

ノートのようなものであるだけで($(…)Command Substitutionを参照してthe Bash manualから空行

+0

質問にファイル 'my_file.properties'のサンプルコンテンツを追加してください。 – GurV

答えて

1

を表示します強調鉱山):

Bashは実行しますサブシェル環境でコマンドを実行し、コマンド置換をコマンドの標準出力に置き換えることにより、の末尾に改行を追加してを置き換えて展開します。

そうではなく、変数にコマンドの出力をキャプチャするには、一時ファイルにそれらをキャプチャする必要があります。

sed "[email protected]=.*@[email protected]" $file | sed "[email protected]=.*@[email protected]" > tmp.tmp 
mv tmp.tmp $file 

それとも、GNUのSEDを使用している場合、あなたは1行でそれを行うことができます:

sed -i -e "[email protected]=.*@[email protected]" -e "[email protected]=.*@[email protected]" $file 

-iは場所にファイルを編集することを意味するので、何の一時ファイルは必要ありません。

+0

また、実際に 'cat'をスクリプトに使用する理由はほとんどありません。 –

+0

なぜ、ファイルの内容を取得するのですか –

+0

'cat filename | sed ... 'には2つのプロセスが含まれています。' sed ... filename'は同じことを行い、1つだけ必要です。 –

関連する問題