• ベストアンサー

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" となるようにしたいのですが、どのように修正したらよいのでしょうか。 説明が下手で恐縮ですが、どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

シングルクォートだと, 変数の展開を行いません. これに対し, ダブルクォートでは変数の展開を行います. 今の場合は変数 TEST を展開してくれないと困るので, シングルクォートではダメです. #1 では 's/00000/'$TEST'/' として $TEST をシングルクォートの外に出すことにより展開させています. もしくは, 単に "s/00000/$TEST/" とダブルクォートに変えても (少なくともこの場合には) 期待通り動くはずです.

noname#229153
質問者

お礼

クォートにはそのような意味があったのですね! 参考書にはシングルの方が強い。。。のような表現で書かれており 曖昧なまま過ごしていました。 わかりやすいご説明ありがとうございます!!

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

そもそも、$TESTに空白・記号が含まれないなら、何も囲まないで良いです。 sed -e s/00000/$TEST/ test.csv >> new_test.csv 「$TESTにどんな文字が入っているかわからない」というケースで、" " で囲みます。

noname#229153
質問者

お礼

ご回答ありがとうございます。 そのような意味があったんですね! 初めて知りました。。。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「シングルクォートとダブルクォートの違い」は OK?

noname#229153
質問者

補足

参考書を見たのですが、正直曖昧です。。。

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.1

文字定数と文字変数の連結にミスがあります。 sed -e 's/00000/'$TEST'/' test.csv >> new_test.csv

noname#229153
質問者

お礼

ご回答ありがとうございます。 教えていただいたとおりに修正します。

関連するQ&A