###前提・実現したいこと
linuxのシェルスクリプトでsedコマンドを使用した処理を記載しているのですが思ったような出力にならずに悩んでいます。
###発生している問題・エラーメッセージ
最終的なアウトプットとして、以下のような形式でファイルを作成したいと考えています。
希望する出力例:
subnet: - { "name": "RDS-SBNET02", "address": "172.16.2.192/26", "nsg_name": RDS-NSG }
しかしながら、自分が作成したshellスクリプト(「該当のソースコード」で引用)では現状、以下のような出力になってしまいます。
subnet: } { "name": "RDS-SBNET02", "address": "172.16.2.192/26", "nsg_name": RDS-NSG
###該当のソースコード
bash
1#!/bin/bash 2 3CSVFILE=edit_NW_vars_preparation.txt 4OUTPUTFILE=common_vars_preparation.yml 5 6cp edit_common_vars_preparation.yml ${OUTPUTFILE} 7sed -i -e "/^nsg_name:*/a subnet:" ${OUTPUTFILE} 8 9for line in `cat ${CSVFILE} | grep -v ^#` 10do 11 subnet_name=`echo ${line} | cut -d ',' -f 1` 12 subnet_address=`echo ${line} | cut -d ',' -f 2` 13 subnet_nsg=`echo ${line} | cut -d ',' -f 3` 14 sed -i -e "/subnet:/a \ - \{ \"name\": \"${subnet_name}\", \"address\": \"${subnet_address}\", \"nsg_name\": ${subnet_nsg} \} " ${OUTPUTFILE} 15done
上記sedコマンドの中で、最後に記載する } を \ でエスケープしているのですが、この処理が意図したように働いてくれずに困っています。以下の部分です。
sed -i -e "/subnet:/a \ - { "name": "${subnet_name}", "address": "${subnet_address}", "nsg_name": ${subnet_nsg} }" ${OUTPUTFILE}
sedコマンドについて、どのように記載すれば「希望する出力例:」のような出力にすることができるでしょうか?
###試したこと
①shellスクリプトのsedを以下のように入力した場合
sed -i -e "/subnet:/a \ - \{ \"name\": \"${subnet_name}\", \"address\": \"${subnet_address}\", \"nsg_name\": ${subnet_nsg} " ${OUTPUTFILE}
①出力は以下のようになります
- { "name": "RDS-SBNET02", "address": "172.16.2.192/26", "nsg_name": RDS-NSG
②shellスクリプトのsedを以下のように入力した場合
sed -i -e "/subnet:/a \ - \{ \"name\": \"${subnet_name}\", \"address\": \"${subnet_address}\", \"nsg_name\": ${subnet_nsg} \}" ${OUTPUTFILE}
②出力は以下のようになります
}- { "name": "RDS-SBNET02", "address": "172.16.2.192/26", "nsg_name": RDS-NSG
①の出力結果の最後に、 } を付与して「希望する出力例」のような形にする、というのが実現したいことです。(何故②のような出力になってしまうのかが解っていない状態です)
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/09 08:52
2017/05/09 09:02
2017/05/09 09:12