sed での一括置換と削除の復習2020年08月14日 13時22分48秒

昔々は sed をループで回したりしていたが、最近の sed はどのシステムでも、ファイル内の置換が出来るようになっている。

むしろ、とてつもない数のファイルを扱う必要などがあって、tmpfs 等まで使って一括削除や一括置換などを行う場面が多々ある。その為、メモを若干更新。

どこでも使えるのは -i にバックアップの拡張子を渡す形式。

% sed -i .bak 's/original/new/g' 
% sed -i .bak '/keyword/d' 
上段が置換の式で、下段が削除の式。

GNU 系の場合は -i に引数を渡さないと、バックアップを作らない。

% sed -i 's/original/new/g' 
% sed -i '/keyword/d' 

BSD 系の場合は -i に引数に空変数を渡すと、バックアップを作らない。

% sed -i ''  's/original/new/g' 
% sed -i '' '/keyword/d' 

一回の sed で変換を行うので随分と効率が良くなっているが、grep と併用して更に高速化。

% sed -i .bak  's/original/new/g' `grep -Rl original * 2>/dev/null`
% sed -i .bak '/keyword/d' `grep -Rl original * 2>/dev/null`
grep の -R を使って再帰的にディレクトリを探し、-l でファイル名のみを戻す。変更が必要なファイルだけ sed で置換。

前回次回