ttlog

日々の開発で得た知見の技術メモ。モバイルアプリネタが多いです。

ファイル内の文字列を置換して上書き保存

便利でたまに使いたくなるのですが、すぐ忘れてしまうので備忘録です。 Perlワンライナーを使用します。

環境

OS version

macOS 10.13.5 (High Sierra)

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' {} \;

参考

https://www.perl.com/pub/2004/08/09/commandline.html/