毎回Linux環境で複数ファイルを対象とした文字列置換コマンドを忘れるのでメモ
▼関連記事
複数ファイルの中身を書き換えるコマンド
コマンドの基本形
複数のファイル内に共通する文字列を、任意の文字列で置き換える
コマンド:
find {path} -name "{file_name}" -or -name "{file_name}" | xargs sed -i "s/{置き換えられる文字列}/{置き換える文字列}/g"
置き換え文字 | 説明 | 例 |
---|---|---|
{path} | findで探索するディレクトリ最上位 | ./ |
{file_name} | ワイルドカード「*」を含むことのできるファイル名 | *.log |
{置き換えられる文字列} | テキスト内で置き換え対象の文字列 | hoge |
{置き換える文字列} | テキスト内を置き換える文字列 | hogehoge |
「-or」で検索するファイル名を複数種類に拡張することができます。
「-name "{file_name}"」を「-type f」のようにすると、すべてのファイルが対象になります。
オプション | 説明 |
---|---|
-i | ファイルの上書き保存 |
s | 文字列の置換 |
g | 行の最初にマッチした文字以外も全て置換 |
-p | 実行されるコマンドの確認用xargsのオプション |
コマンド:
find ./ -type f | xargs -p sed -i "s/hoge/hogehoge/g"
「sed -i "s/hoge/hogehoge" {この後に複数ファイル名}」のように表示されると、複数ファイルが対象のsedコマンドが実行されることが分かります。
コマンドの使用例
特殊文字を含む文字列を置き換えるsedコマンドには以下のような特殊文字がいくつかあります。
特殊文字 | 説明 |
---|---|
'.' | 任意の文字列ワイルドカード |
'[' | 文字集合の開始 |
'\' | エスケープ。特殊文字のエスケープやグループに用いる |
'*' | 0個以上の繰り返しにマッチ |
'^' | 行頭 |
'$' | 行末 |
コマンド:
find ./ -name "*.js" | xargs sed -i "s/camera\.position/maincamera\.positions/g"
- 「camera.position」
- 「camera/position」