ファイル内の文字列を置換して上書き保存
便利でたまに使いたくなるのですが、すぐ忘れてしまうので備忘録です。 Perlのワンライナーを使用します。
環境
OS version
Perl version
$ perl -v This is perl 5, version 26, subversion 2 (v5.26.2) built for darwin-thread-multi-2level ...
単一ファイルの置換
$ perl -p -i -e 's/XXX/YYY/g' FilePath
FilePathが示すファイル中の'XXX'を'YYY'に置換する。
各オプションについては以下:
-p
入力ファイルの各行を、後述する-e
オプションのスクリプトで処理して出力する。このオプションを追加することでsed
コマンドのように扱える。
-i
入力ファイルに処理結果を上書きする。間違えた処理を上書きしてしまうと戻せないため、元ファイルはバックアップ推奨。
-e
実行するスクリプトを指定する。
複数ファイルの一括置換
単一ファイルの置換をfindコマンドで複数ファイルに適用するだけ。
$ find . -type f -exec perl -p -i -e 's/XXX/YYY/g' {} \;