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でgnu-sedをインストールする
$ 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はとても便利なのでこれからも積極的に使っていこうと思います!

# 参考
https://it-ojisan.tokyo/mac-linux-sed/