Linux で find と sed コマンドを使って複数ファイルを一括で置換する

シェアする

複数のファイル内にある文字列を一括で置換する必要があったがコマンドをど忘れしたので調べなおした。

文字列を置換する場合、sed を使うのが一般的だろう。これと find, xargs を以下のように組み合わせる事で複数ファイルを同時に置換する事ができる。

$ find ./ -type f | xargs sed -i "s/before/after/g"

それぞれ以下のような意味がある。

  • find ./ -type f カレントディレクトリ以下のファイルを全て標準出力に出す。
  • | 標準出力に出力したものを次のコマンドへ渡す。
  • xargs 渡された標準出力を次に書くコマンドの引数として利用する。
  • sed -i "s/before/after/g" 渡されたファイルの before を after へ置換する。

しかし上記のコマンドは現存するファイルを直接書き換えてしまう。バックアップを取る場合は以下のように sed の -i 引数に文字列を追加する。

$ find ./ -type f | xargs sed -i.bak "s/before/after/g"

-i.bak とした場合、置換対象のファイル名末尾に .bak という名前をつけてバックアップを保存する事ができる。

Sponsored Link

シェアする

フォローする