次のように、行ごとに複数の部分を含む json 行があります。
"SomeDate":"Date(-2156284800000)",
すべての行の各出現箇所を、より人間が読める形式に変換したいと思います。
"SomeDate":"1901-09-03 00:19:32",
sed を使用して、一致したブロック (この場合はタイムスタンプ) を date コマンドの引数リストに入れてみました。これは失敗します。
$ echo '"SomeDate":"Date(-2156284800000)",' | \
sed "s/Date(\([0-9\-]*\)[0-9][0-9][0-9])/$(date -d@\\1 \"+%F %T\")/g"
date: invalid date `@\\1'
"SomeDate":"",
これをすべてデバッグしようとして、日付に「エコー」を追加して、実行する必要があるコマンドを検証しました
$ echo '"SomeDate":"Date(-2156284800000)",' | \
sed "s/Date(\([0-9\-]*\)[0-9][0-9][0-9])/$(echo date -d@\\1 \"+%F %T\")/g"
"SomeDate":"date -d@-2156284800 "+%F %T"",
$ date -d@-2156284800 "+%F %T"
1901-09-03-00:19:32
最初のコマンドが期待どおりに実行されないのはなぜですか?
私が今持っている最良の推測は、サブシェルが最初に \1 置換なしで実行され、次に結果の出力が実際に sed によって使用されるということです。
自分がやろうとしていることをどのように達成できますか?
PS CentOS 6.6を使用しています