Gazelle
2021年07月07日公開 711 Views

sedを使ってファイル内を簡単に置換する方法

Buildのスクリプトとか、デバッグ用に少しだけファイルを書き換えておきたいのだが手動で毎回変えるのが面倒なのでコマンドを一発叩けばできないかという需要は結構あったりする。

そんなケースでsedコマンドは一発でファイルを書き換えて上書きしてくれるので便利である。例としてgatsby-config.jsというファイルがあり、その中に次のように書かれているとする。

  plugins: [
    `gatsby-plugin-preact`, // enable this for production
    {

gatsby-plugin-preactのPluginはProductionでのみ有効にしておきたいので、この部分を開発中はコメントアウトしておきたい。

この時下記のコマンドでコメントアウトが可能である。

sed -i -e "s|\`gatsby-plugin-preact\`|// \`gatsby-plugin-preact\`|g" gatsby-config.js

-iは上書きのオプション。--in-placeの略なのでこれを指定しても良い。ちなみにin-placeはメモリを使わずに入力データを直接書き換えるというコンピュータ用語である。

-eはexpressionで次に正規表現が続く。s/変更前/変更後/gのように記述しても良いが、特殊文字が多くあった時にエスケープ処理が面倒であり、コードの可読性も落ちるので|で区切ることをおすすめする。

|で区切ると正規表現ではなく単純な置換とみなされ、Linuxコマンドの構文と間違われないように一部文字(例のバッククォートぐらいだと思われる)はエスケープする必要があるが、ほぼ直接値を記入することができ可読性が高い。

aliasを設定して毎回呼び出せるようにする

sedを使って書き換えはできたとしてもこれだけではコマンドを打つ方が大変である。そこで.bashrcにaliasを設定してコマンドで呼び出せるようにする。

alias preactoff='sed -i -e "s|\`gatsby-plugin-preact\`|// \`gatsby-plugin-preact\`|g" gatsby-config.js'
alias preacton='sed -i -e "s|// \`gatsby-plugin-preact\`|\`gatsby-plugin-preact\`|g" gatsby-config.js'

これで開発時にはpreactoff、Deploy時にはpreactonを打てば手軽に切り替えることができるようになった。

使用用途は広いので色々試してみよう。

関連記事

ps axuをして全プロセスを表示し、該当するpidを指定してkillすれば良いという話
2020年03月18日
Railsアプリの独自ドメイン取得からSSL設定まで一貫して行います。環境はCentOS7、サーバはNginx、SSL化には無料のLet's Encryptを使用。
2020年03月18日
さくらVPSでコマンドが何故か重くなった時に、コンソールのCPU使用時間やtopコマンドでのCPU使用率を調査して原因を特定し、不要プロセスを終了させようという話。
2020年04月03日
node用version管理ツールnvmをインストールして、任意のnode versionを使う方法を解説
2020年07月30日
cronがうまく動かせない時はbashファイルの読み込み、実行ユーザ、相対パスの起点について疑ってみると大体動くようになるという話
2020年10月17日
ホームへ戻る