TakafuTips

指定ディレクトリ以下の対象ファイルすべての文字列を置換

LaTeX等を使っていると、定義ファイル内の変数名を変えなくてはいけないことがたまにある。 特にグループで定義ファイルを共有していると、個人のものとconflictを起こしてしまうためである。 これはLaTeXに限らず大規模な開発環境だとそうなるかもしれない。 そこで変更したものをすべてのファイルで置換したい。

grep -lr '置換したい文字列' ./* | xargs sed -i.bak -e 's/置換したい文字列/置換後の文字列/g'

grep

  • -lは直後に指定した文字列を含むファイル名を返す。正規表現とかもできるかな。
  • -rはサブディレクトリも検索対象にする。

sed

  • -iはバックアップの作成。たまにsedの使い方をミスることがあって、空のファイルに置換された文字列だけ、というやばい現象になることがあるので、入れといたほうが良い。
  • -eは置換のコマンド。これはvimと一緒。