空でない最後の行をコマンド出力に置き換える

空でない最後の行をコマンド出力に置き換える

.envこのようなファイルがあります。

PARAM1=val
PARAM2=val

空白のない最後の行を別のファイルの内容に置き換えたいと思います。

これまで私は以下を持っています:

{ (sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' local.env | sed '$d' local.env && printf "CONFIG=%s" "$(cat config.json | jq -c .)") >local.env.mod; } && mv local.env.mod local.env

これを行うより良い/簡単な方法はありますか?

ベストアンサー1

ファイルを元に戻して交換できます。最初空白ではない行

printf -v new_line 'CONFIG=%s' "$(jq -c . config.json)"

tac local.env \
| awk -v line="$new_line" '
      !n && /[^[:blank:]]/ {print line; n = 1; next}
      {print}
  ' \
| tac > local.env.mod && mv local.env.mod local.env

おすすめ記事