この記事は、上智大学エレクトロニクス研究部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 |