
コマンドラインから複数のドキュメント内のテキストを検索して置換する
コマンドラインに慣れていて、複数のテキスト文書のグループ全体にわたって単語、フレーズ、URL、または文字を検索・置換する必要がある場合、Perl は非常に役立ちます。単一の文書内であっても、複数の文書にまたがるグループであっても、シンプルなコマンド文字列でテキストの一括検索・置換を非常に迅速に実行できます。
コマンドラインの多くの部分と同様に、確認プロセスはありません。そのため、コマンドを開始する前に構文が正しく設定されていることを確認する必要があります。そうでない場合は、入力ミスを修正するためにもう一度検索と置換を実行する必要がある場合があります。
基本的なコマンド構文は次のとおりです。
perl -pi -w -e 's/THIS/THAT/g;' /path/to/files*.txt
単語 1 つの例として、「Documents」フォルダ内のすべての .txt ファイルで「ogre」のすべてのインスタンスを「cornbread」に置き換える必要がある場合は、次のコマンドを使用します。
perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/*.txt
フレーズ全体の検索と置換の例として、Documents ディレクトリに保存されている「Films」で始まる一連の .txt ファイル内の「The Chocolate Factory」という文全体を「The Wizard of Oz」に置換するとします。
perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films*.txt
検索と置換は即座に実行されます。catとgrepを使って変更内容を再確認できます。
cat ~/Documents/Films124.txt |grep "Wizard of Oz"
確かに、これはかなり高度で、複数のドキュメントの一括検索と置換は TextWrangler や BBEdit などの GUI アプリを使えばもっとユーザーフレンドリーな方法で実行できますが、このような簡単なタスクや類似のタスクの場合はコマンド ラインの方が速い場合があり、使用するために追加のダウンロードも必要ありません。
この素晴らしいトリックを Lifehacker が紹介してくれたことに大賛成です。
追記:sedコマンドは、コマンドラインから素早く検索と置換を行うもう一つの方法です。sedコマンドについては別の記事で詳しく説明しますが、このタスクにおけるsedの基本構文は少しシンプルで覚えやすいです。
sed -i 's/THIS/THAT/g' /path/to/files*.txt
正しい方法や間違った方法はないので、perl を使用するか sed を使用するかは個人の好みの問題になります。