Windowsでファイル内の文字列一括置換

このQ&Aのポイント
  • Windows上で特定のフォルダ内にある複数ファイルに書かれている文字列をperlで一括置換する方法について教えてください。
  • 条件ごとに複数の置換前と置換後の文字列を指定することができ、1ファイル内で複数ヒットする可能性も考慮してください。
  • 具体的には、Windows上でperlを実行し、特定のフォルダにある複数のXMLファイルの内容を置換したいです。置換前と置換後の文字列は複数条件があります。
回答を見る
  • ベストアンサー

Windowsでファイル内の文字列一括置換

perl初心者です。 Windows上で特定のフォルダ内にあるファイルに書かれている 文字列をperlで一括置換したいのですが、方法がわかりません。 アドバイスをお願いいたします。 やりたいこと。 ・Windows上で実行。 ・特定のフォルダ内にある複数ファイルが対象。 ・置換したい条件は複数で、1ファイル内で複数ヒットするる可能性あり。 ・言語はperl 例) 条件1 ・置換前:tokyoto ・置換後:kanagawaken 条件2 ・置換前:saitamaken ・置換後:tibaken ・ファイル  c:\test1\a\a1.xml  c:\test1\a\a2.xml  c:\test1\b\b1.xml ・a1.xmlの内容  tokyotokawasakishi tokyotoyokohamashi saitamakenitikawashi ・a2.xmlの内容  kanagawakensagamiharashi saitamakentibashi ・b1.xmlの内容 tokyotohiratukashi ↓置換後 ・a1.xmlの内容  kanagawakenkawasakishi kanagawakenyokohamashi  tibakenitikawashi ・a2.xmlの内容  kanagawakensagamiharashi tibakentibashi ・b1.xmlの内容 kanagawakenhiratukashi

  • Perl
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

コマンドラインの最初の引数にスクリプトファイルを指定して、残りに処理対象のファイルを指定すれば、前回の回答と同じ処理となります。置き換えは、スクリプトファイルに追加していきます。 perl -pi replace.pl a1.xml a2.xml b1.xml replace.pl s/tokyoto/kanagawaken/g; s/saitamaken/tibaken/g;

komegu_66
質問者

お礼

複数フォルダ配下からの取得方法がわからなかったのですが、いただいた情報を参考にさせていただきました。 ありがとうございました。

komegu_66
質問者

補足

ありがとうございます。 DOSコマンドでたたいた場合、バックアップファイルをとらないとエラーになってしまうようですね。 特定のフォルダを指定する方法がわからないので、ただいま調査中です。

その他の回答 (2)

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.3

特定のフォルダー内の特定の拡張子だけなら 1の方のでいいんじゃないでしょうか ファイル名を抜き出したいならこれになります use strict; use Cwd; my @an = glob "*"; @an = grep/xml/,@an; for(@an){$_= cwd."/$_\n";} chdir '/Users/ユーザー名/Desktop';#階層移動 open GG,">>hoge.txt" or print"$!\n"; print GG @an; close GG; __END__ Macの階層セパレーターは/になるけど Winだと¥¥になるのでしょうか? フォルダーを自動でとことん根こそぎなら いろんな関数が必要になります

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

目的のフォルダに移動して、次のコマンドラインを実行すれば置き換えられると思います。なお、ファイルを直接置き換えてしまうので、元のファイルを残したい場合は、-pi の直後に元のファイル名に付加する文字列 (.bk, .org など) を指定してください。 perl -pi -e "s/tokyouto/kanagawaken/g;s/saitamaken/tibaken/g;" a1.xml a2.xml b1.xml

komegu_66
質問者

補足

ありがとうございます。 実際、置換する条件はたくさんあり、ファイルもたくさんあるため、 ファイルに記載して実行したいのですが、 その場合、どのように記載すればよいのでしょうか。

関連するQ&A

  • 文字列の置換

    AファイルのA1セルからBファイルのC1セルにデータを反映させたとします。 その際に以下のように文字列を複数置換させたいのです。 A1セル   C1セル りんご → みかん みかん → ぶどう なし  → 空欄 空欄  → 空欄 上記のようにセルのデータを複数置換することはできるのでしょうか? 又、置換できるならどの関数を使えばよいのでしょうか?

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • xmlファイル内の文字列置換

    エクセルマクロ(VBA)で、xmlファイルを自動生成するツールを作成しようとしています。 やりたいことは、「テンプレートとなるxmlファイルを用意しておき、そのxmlファイルに記述してある特定の文字列を、エクセルで記入したデータで置換する」です。 似たようなマクロを作成された経験のある方いらっしゃいましたら、置換するために行う手順、及び必要な関数等を教えていただけますでしょうか。 何卒よろしくお願いいたします。

  • ディレクトリ内の複数ファイルの中から特定の文字列を置換したい

    ディレクトリ内の複数ファイルの中から特定の文字列を置換したい 要は、あるフォルダ内のテキストファイルに含まれる 123を987にしたいということなんですが。 sedは使えなかったんで、 perl -p -i -e 's/123/987/' *.txt としたらできました。 しかし、 perl -p -i -e 's/$rh, $rh1/$rh2, $rh2/' *.cgi のようにスペースを含むとどうもうまくいきません。 教えてください。お願いします。

  • 複数文字列の一括置換?

    置換とは少々違うのかもしれませんが… ファイルA: あいうえお title1 かきくけこ title2 さしすせそ title3 たちつてと title4 ファイルB: 1 アイウエオ 2 カキクケコ 4 タチツテト ファイルC: あいうえお アイウエオ かきくけこ カキクケコ さしすせそ title3 たちつてと タチツテト * ファイルは全てテキスト形式です。 Aのテキストを、Bを使ってCのように一気に変換したいのですが、何か良い方法は無いでしょうか? (変換する内容がBに無い場合もありえますので、その場合の処理も指定したいです。) 手軽に行える方法(ソフト?)等があると助かります。 ちなみに今は、 ・Aのテキストのtitle部分を削除する ・Tab区切りに変える ・エクセルに貼り付ける ・vlookup関数で変換 とやっていますが、ファイル数が多く大変です。 実際はAの内容はもっと複雑で、vlookupが使えるように無理矢理Tab区切りにしているので、変換後にもとの形に戻すのが難しいです;;

  • 複数ファイルの文字列置換の方法について

    あるディレクトリ内にある全てのテキストファイルの中から、「A」という文字列を「B」に置換したいのですが、秀丸もしくはPerlなどで簡単にできますでしょうか? ご存知の方、教えて下さい。 宜しくお願いします。

  • ファイルの内の文字列の置換について

    質問なんですが、sedコマンドを使用して文字の置換をやってみたんですが、同じファイルに置換した情報を上書きすることは可能でしょうか? 今試した例としては sed -e 's/aaa/bbb/g' test > test と試してみたんですがファイルの内容がなくなってしまっていました。 同じファイルに置換内容を入れることは可能なのでしょうか? 他の方法がある場合は教えてください。 よろしくお願いします。

  • 複数のテキストファイルの一括置換について

    複数のテキストファイルの一括置換について 複数のテキストファイル(html)の中にある 【地域名】という文字列を一括でそれぞれA、B、C・・・・という風に異なる文字列に変換したいです。 たとえば 001/index.html の中にある【地域名】は北海道 に変換 002/index.html の中にある【地域名】は青森 に変換 ・ ・ ・ 変換前の文字列は同一ですが、変換後の文字列を全ファイル異なるものにしたいので秀丸等の一括置換ができずに困っています。 全ファイル開いて1つ1つ検索置換していくには2000ファイルほどあるので大変なので何かいい案はないでしょうか? よろしくお願いいたします。

  • ファイルを開かずにテキストファイルの文字列置換

    続けての投稿で申し訳ないのですが、複数のフォルダ中のテキストファイルすべての中身を検索してある文字列を置換する方法を教えてください。 行いたい作業例ですが、 1)ABC- → ABC-   ある特定の半角文字列+"-"を全角に変換 2)2ー → 2-      ある特定の文字列+"ー(全角の長音)"を文字列+"-(全角のマイナス)"に 3)192.168.0.?? → ABC0?? にしたいです。 フォルダは複数あるため、一階層上から作業できる方がいいです。 AAAというフォルダ下に先のABCというフォルダ以外にDEFやGHIといったフォルダがあり、その下に001-00.txtや001-01.txtというフォルダがあるということです。 よろしくお願いします。

  • バッチファイルでファイルを置換

    バッチファイルでファイルを置換 あるバッチファイルをダブルクリックすると 特定のファイル名のファイルを置き換えするような事がしたいのです 例えば c:\aaa\test\a.ini d:\test\a.ini というファイルがあったとします どのフォルダ階層にあるかはわからないのですが testフォルダ以下にあるa.iniファイルを a.bakというファイルにリネームして バッチファイルのカレントに置いてあるa.iniファイルを そのフォルダにコピーする test\a.iniファイルがどこにも見つからなければ 該当ファイルが見つかりませんでしたので更新に失敗しました というようなメッセージを出す このようなプログラムをバッチファイルで作成する事は可能でしょうか? バッチファイルの基本コマンドは知っているのですが forとか高度な使い方はよくわからず教えて頂きたいのです よろしくお願い致します