rukurxの日記

自分の日々の作業や調べたことのメモ

Macにgnu-sedをインストールする

sedを使ってファイルの先頭行に文字列を追加しようとしたら、LinuxMacで挙動が違った。

  • 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がインストールされているためだった。 BSDGNUsedの仕様違うのか…

普段の開発ではローカルのMacで開発後、Linuxで確認していたので、Macでも同じ挙動になって欲しい… どうやらGNU版のsedMacにインストールできるようなので早速やってみる。

$ 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オプションつけることでMacsedコマンドに置き換えてくれるのでaliasを使いたくない人はこっちでもよい。

$ brew install - with-default-names gnu-sed

これでMacでも実行することができました!

$ sed -i '1ihoge' test.txt
$ cat test.txt
hoge

sedはとても便利なのでこれからも積極的に使っていこうと思います!

参考

it-ojisan.tokyo