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 で置換。

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/08/14/9278503/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。