【Linux】sedコマンドで複数ファイルの文字列を一括置換する

【Linux】sedコマンドで複数ファイルの文字列を一括置換する

Linuxで文字列を一括置換する方法を解説します。findで検索したファイルをxargsでsedに渡して、複数ファイルの文字列を一括置換することができます。

findコマンドとsedコマンドを組み合わせることで、ディレクトリ配下の文字列を一括置換することができます。
keywordを置換前文字列、after_keywordを置換後文字列として説明をします。
それぞれ置換前後の文字列を置き換えてご参照ください。

置換前確認(keyword)

置換前の文字列を確認します。

grep -r "keyword" ./

特定のディレクトリを除外する場合は--exclude-dirを使用してください。

grep -r "keyword" ./ --exclude-dir={.git,node_modules}

一括置換(keyword⇒after_keyword)

カレントディレクトリ配下のkeywordafter_keywordへ一括置換します。
ファイルはsedのiオプションにより置換後で保存されるので、コマンド実行時はご注意ください。

  • keywork:置換前文字列
  • after_keywork:置換後文字列

カレントディレクトリ配下のファイルを一括置換する場合は以下コマンドを実行します。

find ./ -type f -print | xargs sed -i "s/keyword/after_keyword/g"

特定のディレクトリを除外する場合は以下のようにgrepコマンドと組み合わせます。

find ./ -type f -print | grep -v -e node_modules -e .git | xargs sed -i "s/keyword/after_keyword/g"

上記の場合はnode_modules.gitを除外しています。

置換後確認(after_keyword)

置換されたことを確認します。

grep -r "after_keyword" ./

特定のディレクトリを除外する場合は--exclude-dirを使用してください。

grep -r "after_keyword" ./ --exclude-dir={.git,node_modules}

以上です。
よいITライフを。