GNU系とBSD系のコマンドで特によくハマるやつ
「あなたのシェルスクリプト、ポータビリティありますか?」
まぁ個人的によーーーくハマる、というかほぼほぼBSD環境やらかしがちなやつのまとめです。バージョンによっては別の挙動をすることも多いので注意。
grep
GNU
-P
でPerl互換の正規表現が使える。個人的に戻り読み・先読みを使うことが多々あるので無いと死ぬ- e.g., 例えばHTMLタグの中身を抜き出すとき:
echo -n '<h1>foo</h1>' | grep -oP '(?<=<h1>).+(?=</h1>)'
- e.g., 例えばHTMLタグの中身を抜き出すとき:
- 単純に実行速度が速い
BSD
- 特にいいところが思い浮かばなかった
sed
GNU
- バックスラッシュでメタ文字をエスケープする or
-E/-r
オプションで正規表現が使える -i
オプション (in-placeオプション) のバックアップファイルを省略できる (≒オプション引数なしだとバックアップファイルは作られない)
BSD
-E
オプションで正規表現が使える-i
オプション (in-placeオプション) のバックアップファイルを省略できない (≒オプション引数なしのつもりで実行すると変なファイルが出来上がる)- e.g.,
sed -i -e 's/foo/bar/g' -e 's/hoge/piyo/g' some.txt
->some.txt-e
という未知のファイルが発生
- e.g.,
xargs
GNU
- 対象が空だったときでも1回実行される。なぜ…
echo -n '' | xargs echo foo
->foo
BSD
base64
GNU
- デコードは
-d
オプションで
BSD
- デコードは
-D
オプションで