質問: 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`
回答: 問題が判明したので、自己回答します。 posix sed での s 式は、次の形式です。 > > [2addr]s/BRE/replacement/flags > > > ここで、`\`の直後に改行文字を入力することが適切なのは、 replacement の中だけです。自分は、 BRE の中でそれをやろうとしていました。 なので、今回のスクリプトは、以下のようにすると posix compliant になります。 ``` redis-cli config get '*' | sed -e 'N;s/\n\(.*\)/: "\1"/' ``` ### 参考