Linux

複数のファイル内の文字列をまとめて置換するLinuxコマンド

More than 1 year has passed since last update.

sedコマンドのiオプションの後ろに指定の文字列を追加すると、元のファイル名 + iオプションに指定した文字列 として残っているので、保険として指定しておくと良い。

バッシュの場合

一つのファイルを対象にする場合

bash
$ grep -l '置換対象の文字列' 置換対象のファイル | xargs sed -i.bak -e 's/置換対象の文字列/置換後の文字列/g'

カレントディレクトリのファイル全てを対象にする場合

bash
grep -l '置換対象の文字列' ./* | xargs sed -i.bak -e 's/置換対象の文字列/置換後の文字列/g'

ファイル名に正規表現を使う場合

bash
grep -l '置換対象の文字列' ./hoge* | xargs sed -i.bak -e 's/置換対象の文字列/置換後の文字列/g'

hoge1やhoge2などが対象になる。

完璧に頭に入ってないとgrep調べてsed調べてxargs調べて組み合わせてと手間かかるんでメモしとかないとめんどくさいんですよね。