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

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

記事の文字数:920

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


スポンサーリンク

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

sedコマンドとは

入力されたテキストデータを行単位で読み取り、テキスト変換などの編集して、行単位で出力を行います。
主に文字列の置換や抽出に用いられて、正規表現にも対応しています。
sedはStream EDitorの略称です。

以下コマンドを実行すると先頭のkeywordafter_keywordへ置換して出力します。

実行例
$ echo 'keyword keyword' | sed 's/keyword/after_keyword/'
after_keyword keyword

sedの最後にgを指定するとすべてのkeywordafter_keywordへ置換して出力します。

実行例
$ echo 'keyword keyword' | sed 's/keyword/after_keyword/g'
after_keyword after_keyword

grepで置換前確認

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

実行コマンド
grep -r "keyword" ./

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

実行コマンド
grep -r "keyword" ./ --exclude-dir={.git,node_modules}

sedで一括置換

カレントディレクトリ配下の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を除外しています。

grepで置換後確認

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

実行コマンド
grep -r "after_keyword" ./

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

実行コマンド
grep -r "after_keyword" ./ --exclude-dir={.git,node_modules}

まとめ

  • sedコマンドとfindコマンドを組合せることで、複数ファイルの文字列置換ができる。

grepコマンドによる再帰検索の解説はこちらのリンク を参照してください。


以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top