脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Linuxで対象ディレクトリ以下のファイルの中身を一斉置換する方法

URLが変わったとか、ユーザネームを変えたいとか、特定のディレクトリ以下の全ファイルに対して、置換をかける方法です。

コマンド

find ./ -name '*' -type f | xargs sed -i 's/${置換前}/${置換後}/g'

ひとつずつ説明

# 指定したディレクトリ以下の指定した文字を含むファイルをすべて選択
find ${対象のディレクトリ} -name '*${ファイル名}*' -type f

# ${置換前}を${置換後}に変換
sed -i 's/${置換前}/${置換後}/g'

# 組み合わせるためにパイプとxargsを利用
| xargs

# 全部まとめると
find ${対象ディレクトリ} -name '*${対象のファイル}*' -type f | xargs sed -i 's/${置換前}/${置換後}/g'

  • sed の"-i"オプションは文字列挿入

Linuxコマンド集 - 【 sed 】 文字列の置換、行の削除を行う:ITpro

  • ファイル名のところは正規表現で指定する。(以下みたいにしてもいい)

    • *${対象のファイル}.html
    • *${対象のファイル}
    • ${対象のファイル}*
    • ${対象のファイル}