読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

指定ディレクトリ以下の特定ファイルの特定文字列を一括置換する

ググれば出てくるので、ブログに書くまでも無い気もしますが、まぁ書いたほうが自分のまとめにもなるので。

参考サイト:


まぁ、一括置換したいタイミングってのは良く出てきますよね。

私は、よくログインの必要なページの作成を、ログイン処理を作成する前に作り、後からログイン機能を付け足すようにしているので(なぜかというと、動作確認や開発でいちいちログインするのもイヤなので)、その場合、たとえばEthnaだと継承先を後から変更することがよくあります。
具体的には、authenticationauthenticate の処理を記述してある Sample_AdminActionClass があったとして、「Sample_ActionClass」から、「Sample_AdminActionClass」へ変更するような形です。*1
ちなみに、skeltonファイル作って、最後にauthenticationauthenticateの処理書けばいいじゃん!!というツッコミは、もっともだと思います!!(笑) *2

で、app/action/Admin/ 以下のすべてのファイルの、「Sample_ActionClass」を「Sample_AdminActionClass」に書き換える際に、コイツの出番というわけです(前置き長っ!)

// Adminディレクトリへすでに移動している。
[sotaro@** Admin]$ for FILE in `find ./ -name "*.php"`; do cp $FILE $FILE.bak; sed -e "s/Sample_ActionForm/Sample_AdminActionForm/g" $FILE.bak > $FILE; done


こういうワンライナーなスクリプトをちゃちゃっと書けるようになりたいものですなあ。。
"*.php"のところを色々いじれば、好きなファイルを好きなだけ置換できます。もちろん、s/ほにゃらら/ の部分には正規表現が使えます。


(修正) authentication → authenticate

*1:追記:「継承先を変更」、です。 Sample_Action_Index は Sample_ActionClass を継承してていいけど、Sample_Action_Admin* は Sample_AdminActionClass を継承したい、みたいな場合。

*2:さっきふと思った。まぁ「もう作り始めちゃったから、後で一括でやったほうが楽」と思う瞬間もきっとどこかにあるはず!!