この記事は、上智大学エレクトロニクス研究部Advent Calendar第9日目の記事です。
まえがき
シェルスクリプトを勉強すると最初の方に出てくる sed コマンドですが、実はMacの Command Line Tools へ同梱されている sed コマンドはBSDライセンスのもので、Linuxで広く使われているGNU版のものとは異なります。そのせいでネットでコピペした sed コマンドのワンライナーが動かないということが発生します。この記事ではBSD版の sed と GNU版の sed で同じことをしようとしたときにどのようにコマンドが異なるのかを比較します。
ちなみに
Homebrew を使えば簡単にGNU版 sed をインストールできます。
brew install gnu-sed
以下のように gsed と打ち込むとLinuxと同じように使えることがわかります。
echo hogehoge | gsed 's/hoge/fuga\n/g'
fuga
fuga
なので、以下は読む必要はありませんが、宗教的な理由でGNUコマンドを使いたくないという方、少しでも余計なツールを入れずに標準環境で頑張りたいという方の参考になればと思います。
BSD版 sed と GNU版 sed の対応表
| コマンドの内容 | GNU | BSD |
|---|---|---|
| 改行文字に置き換える | sed 's/;/;\n/g' |
sed -e 's/;/;\'$'\n/g' |
| 直接編集(バックアップを作らない) | sed -i '1d' hoge.txt |
sed -i '' '1d' hoge.txt |
| 直接編集(バックアップを作る) | sed -i.backup '1d' hoge.txt |
sed -i '.backup' '1d' hoge.txt |