posix compliant だと思っている sed コマンドが linux と mac で挙動が違う
redis-cli を用いて、今現在の redis の config 情報を yaml で出力しようと思いました。
redis-cli config get '*' | sed -e $'N;s/\\\n\\(.*\\)/: "\\1"/'
redis-cli は「設定項目」「その値」が交互に続く形で出力を行うので、それを、上記のように sed で yaml 形式に整形しようと考えました。
これは、 linux サーバーで実行すると、問題なく実行されます。一方、手元の mac で実行すると、以下のエラーを出力します。
$ redis-cli config get '*' | sed -e $'N;s/\\\n\\(.*\\)/: "\\1"/'
sed: 1: "N;s/\
\(.*\)/: "\1"/
": unterminated substitute pattern
質問
- Mac の sed で上記の sed script がエラーになるのはなぜですか?
(追記) バージョン情報
- linux 上:
sed (GNU sed) 4.2.2
- mac: 確認方法がわからないですが、
man sed
によると以下が書いてあります。The sed utility is expected to be a superset of the IEEE Std 1003.2 (``POSIX.2'') specification.
- man ページの末尾の日付:
May 10, 2005