Macにgnu-sedをインストールする
sedを使ってファイルの先頭行に文字列を追加しようとしたら、LinuxとMacで挙動が違った。
- Linuxの場合は正常に処理が完了する
$ sed -i '1ihoge' test.txt $ cat test.txt hoge
- Macの場合はエラーになる。
$ sed -i '1ihoge' test.txt sed: 1: "test.txt": undefined label 'est.txt'
いろいろと調べているとMacではBSD版がインストールされていて、CentOSではGNU版のsedがインストールされているためだった。 BSDとGNUでsedの仕様違うのか…
普段の開発ではローカルのMacで開発後、Linuxで確認していたので、Macでも同じ挙動になって欲しい… どうやらGNU版のsedをMacにインストールできるようなので早速やってみる。
$ brew install gnu-sed
gnu-sedインストール時のメッセージでコマンド名の接頭辞にgがついてるとのことなので、コマンド名は gsed になっている。
The command has been installed with the prefix "g". If you do not want the prefix, install using the "with-default-names" option.
- sedコマンドで使えるようにaliasを追加して読み込む
$ vim ~/.zshrc alias sed='gsed' $ source ~/.zshrc
また、インストール時のメッセージにあるように、インストール時にwith-default-namesオプションつけることでMacのsedコマンドに置き換えてくれるのでaliasを使いたくない人はこっちでもよい。
$ brew install - with-default-names gnu-sed
これでMacでも実行することができました!
$ sed -i '1ihoge' test.txt $ cat test.txt hoge
sedはとても便利なのでこれからも積極的に使っていこうと思います!