• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:置換コマンド)

初心者向けの置換コマンド利用方法

このQ&Aのポイント
  • freeBSD5.3を使用している初心者の方が、特定ディレクトリ以下の複数ファイルの内容を一括置換したい場合について質問されています。
  • sedコマンドを使用してAAAをBBBに置換する方法を試した結果、ファイルの内容は置換されますが、元のファイルには保存されていないという問題が発生しています。
  • また、質問者は置換後のファイルを/hoge2ディレクトリに同じ名前で保存したいという希望を持っています。アドバイスを求めています。

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

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

No.2のように別ファイルを作りたくないとか、数個程度の置換なら以下のような感じでもいいです。 -------8<-------8<-------8<-------8<-------8<------ #!/bin/sh for FILE in hoge/* do sed -e s/AAA/BBB/g -e s/CCC/DDD/g ${FILE} > hoge2/`basename ${FILE}` done -------8<-------8<-------8<-------8<-------8<------

その他の回答 (2)

  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

置換が複数あるようでしたら、 ○replace.sed -------8<-------8<-------8<-------8<------- s/AAA/BBB/g s/CCC/DDD/g -------8<-------8<-------8<-------8<------- のようなファイルを用意し、No.1のスクリプトを以下のように修正すればいいと思います。 -------8<-------8<-------8<-------8<-------8<------ #!/bin/sh for FILE in /hoge/* do sed -f replace.sed ${FILE} > /hoge2/`basename ${FILE}` done -------8<-------8<-------8<-------8<-------8<------

  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

やり方はいろいろあると思いますが、例えば、以下のようなシェルスクリプトを作成して実行すればいいと思います。 -------8<-------8<-------8<-------8<-------8<------ #!/bin/sh for FILE in /hoge/* do sed s/AAA/BBB/g ${FILE} > /hoge2/`basename ${FILE}` done -------8<-------8<-------8<-------8<-------8<------ シェルスクリプトで行っている事は、/hogeディレクトリ配下のファイル毎に「sed s/AAA/BBB/g」を実行し、表示された内容をリダイレクトによって/hoge2ディレクトリ配下に/hogeディレクトリ配下にあった時のファイル名でファイル化してます。  

noname#92745
質問者

お礼

ありがとうございました! 置換が1種類なら上の方法でできました。 しかし実は置換が2種類(AAAをBBBだけでなく、CCCをDDDなど)でやりたかったので、 for FILE in admin/* do sed s/AAA/BBB/g ${FILE} > admin2/`basename ${FILE}` done for FILE in admin2/* do sed s/CCC/DDD/g ${FILE} > admin2/`basename ${FILE}BB` done などとやってみましたが、いちいち最終的にできたファイル名(xxxBB)をxxxにリネームしなければいけないのが面倒でした。きっとこれもこんなことしなくても一発処理できるスクリプトがあるんでしょうね。。。。

関連するQ&A