- ベストアンサー
Windowsでファイル内の文字列一括置換
- Windows上で特定のフォルダ内にある複数ファイルに書かれている文字列をperlで一括置換する方法について教えてください。
- 条件ごとに複数の置換前と置換後の文字列を指定することができ、1ファイル内で複数ヒットする可能性も考慮してください。
- 具体的には、Windows上でperlを実行し、特定のフォルダにある複数のXMLファイルの内容を置換したいです。置換前と置換後の文字列は複数条件があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コマンドラインの最初の引数にスクリプトファイルを指定して、残りに処理対象のファイルを指定すれば、前回の回答と同じ処理となります。置き換えは、スクリプトファイルに追加していきます。 perl -pi replace.pl a1.xml a2.xml b1.xml replace.pl s/tokyoto/kanagawaken/g; s/saitamaken/tibaken/g;
その他の回答 (2)
- Wap58
- ベストアンサー率33% (29/87)
特定のフォルダー内の特定の拡張子だけなら 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)
目的のフォルダに移動して、次のコマンドラインを実行すれば置き換えられると思います。なお、ファイルを直接置き換えてしまうので、元のファイルを残したい場合は、-pi の直後に元のファイル名に付加する文字列 (.bk, .org など) を指定してください。 perl -pi -e "s/tokyouto/kanagawaken/g;s/saitamaken/tibaken/g;" a1.xml a2.xml b1.xml
補足
ありがとうございます。 実際、置換する条件はたくさんあり、ファイルもたくさんあるため、 ファイルに記載して実行したいのですが、 その場合、どのように記載すればよいのでしょうか。
お礼
複数フォルダ配下からの取得方法がわからなかったのですが、いただいた情報を参考にさせていただきました。 ありがとうございました。
補足
ありがとうございます。 DOSコマンドでたたいた場合、バックアップファイルをとらないとエラーになってしまうようですね。 特定のフォルダを指定する方法がわからないので、ただいま調査中です。