grepとsedで特定のディレクトリ以下のファイルを一括置換

「grep」と「sed」で複数のファイルを一括置換

特定のディレクトリ内のファイルで特定の文字を一括置換するには「grep」と「sed」をコマンドを利用すると一括で置換できます

書式:grep -rl “置換対象の文字列" 対象ディレクトリ | xargs sed -i 's/置換対象の文字列/置換後の文字列/g’

  • grepの「-r」で検索ディレクトリに再帰的に検索するのでサブディレクトリも検索しています
  • grepの「-l」で検索結果にはファイル名のみを出力します
  • sedの「-i」で対象ファイルの上書き保存します
$ grep -rl "test_data1" /var/www/html/ | xargs sed -i 's/test_data1/test_data2/g'

一括する置換する文字列がIPアドレスの場合

特定のIPアドレスを違うIPアドレスを置換する場合はですが、ピリオド(.)はエスケープする必要があるので「192\.168\.0\.1」のようにバックスラッシュ( \ )エスケープする必要があります

% grep -rl "192.168.0.5" /var/www/html/ | xargs sed -i 's/192\.168\.0\.5/192\.168\.0\.10/g'