• ベストアンサー

sed コマンドについて

はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 linuxのシェルファイルが100以上あり、こちらの全ファイル内に含まれる文字列"ABCDE"を文字列"12345"に置換をしたいと思っています。 sed コマンドで sed -e "s/ABCDE/12345/g" *.csh のように実行しても、画面上に変換後が表示されるだけで その後、ファイルを見ても置換されていません。 どのようにすれば、全ファイルが修正されるのでしょうか。 以上です。回答の方をよろしくお願い致します。

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

  • ベストアンサー
  • darter
  • ベストアンサー率48% (12/25)
回答No.2

$ sed --help と打つと、簡単な使用方法が表示されますが、 その中の -i オプションが使えます。 $ sed -i "s/ABCDE/12345/g" *.csh で、すべて置換されます。 ちなみに $ sed -i.bak "s/ABCDE/12345/g" *.csh としてやると、置換前のファイルが *.csh.bak としてバックアップされます。

c_gen
質問者

お礼

非常にわかりやすいご回答ありがとうございました。 助かりました。

その他の回答 (2)

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.3

もっと地道にやりましょう。 1) $ ls *.csh > deljcl 2) deljclの各行を下記の様に修正 sed -e "s/ABCDE/12345/g" hoge.csh > deldel; mv deldel hoge.csh ここで、hoge.cshは各行ごとに異なることとします。 3) シェルスクリプトを実行 $ sh deljcl これで、全て置換されているはずです。

c_gen
質問者

お礼

ご回答頂きありがとうございました。 参考になりました。

  • qaaq
  • ベストアンサー率36% (146/404)
回答No.1

ちょっとカッコ悪いですが、一旦ファイル(sed.sh)に書き出して、 % find . -name '*.csh' -exec echo "sed -e \"s/ABCDE/12345/g\" {} > a ; mv a {} " \; > ./sed.sh 実行する。 % sh -e ./sed.sh っていうのは如何でしょう。

c_gen
質問者

お礼

ご回答頂きありがとうございました。 参考になりました。

関連するQ&A