- ベストアンサー
shellプログラミングについて
お世話になっております。 shellプログラミングで質問があります。 csvファイルを読み込み、特定の文字列を置換して 新しいcsvファイルを作成したいのですが、 うまくいきません。 test.csvの内容は "00000","あああああ","AAAAA" となっており、 $TESTには今11111が入っています。 sed -e 's/00000/$TEST/' test.csv >> new_test.csv を実行すると、new_test.csvは "$TEST","あああああ","AAAAA" となってしまいました。 "11111","あああああ","AAAAA" となるようにしたいのですが、どのように修正したらよいのでしょうか。 説明が下手で恐縮ですが、どうぞよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
シングルクォートだと, 変数の展開を行いません. これに対し, ダブルクォートでは変数の展開を行います. 今の場合は変数 TEST を展開してくれないと困るので, シングルクォートではダメです. #1 では 's/00000/'$TEST'/' として $TEST をシングルクォートの外に出すことにより展開させています. もしくは, 単に "s/00000/$TEST/" とダブルクォートに変えても (少なくともこの場合には) 期待通り動くはずです.
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10358)
そもそも、$TESTに空白・記号が含まれないなら、何も囲まないで良いです。 sed -e s/00000/$TEST/ test.csv >> new_test.csv 「$TESTにどんな文字が入っているかわからない」というケースで、" " で囲みます。
お礼
ご回答ありがとうございます。 そのような意味があったんですね! 初めて知りました。。。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「シングルクォートとダブルクォートの違い」は OK?
補足
参考書を見たのですが、正直曖昧です。。。
- Hardking
- ベストアンサー率45% (73/160)
文字定数と文字変数の連結にミスがあります。 sed -e 's/00000/'$TEST'/' test.csv >> new_test.csv
お礼
ご回答ありがとうございます。 教えていただいたとおりに修正します。
お礼
クォートにはそのような意味があったのですね! 参考書にはシングルの方が強い。。。のような表現で書かれており 曖昧なまま過ごしていました。 わかりやすいご説明ありがとうございます!!