(Macターミナル)sedはJSONを解析しています...私は何が間違っていますか?

(Macターミナル)sedはJSONを解析しています...私は何が間違っていますか?

Mac端末でJSONレスポンスの「name」を解析しようとしています。

{"created_at":"2012-08-27T20:04:27Z","deleted_at":null,"id":21462840,"item_type":"video","name":"CastingBy-v12 mix.mov", "private":true,"redirect_url":null,"remote_url":"http://f.cl.ly/items/3D0P02b3e3p2I/CastingBy-v12%20mixed.mov","source":"Cloud/1.5.4 CFNetwork/520.4.3 Darwin/11.4.0 (x86_64) (MacPro5%2C1)","updated_at":"2012-08-27T20:13:38Z","view_counter":2,"href":"http:/ / /my.cl.ly/items/2840","icon":"http://my.cld.me/images/item-types/video.png","購読":true,"url": " http://files.housenyc.com/1I3E2F3C","content_url":"http://files.eeehousenyc.com/1I3Q0Z1E2F3C/CastingBy-v12%20mixed.mov","download_url":"http://files . eeehousenyc .com/1I3Q0F3C/download/CastingBy-v12%20mixed.mov","gauge_id":null}

私はそれを使用しています

sed 's/{.*?"name":"\(.+?\)".*/\1/'

ただし、文字列全体を返します。

帰ってきたらいいな

CastingBy-v12 mixed.mov

ベストアンサー1

sedだけを使ってjsonを解析するのは、HTMLを解析するのと同じくらい問題があります。つまり、要素を他の要素に含めることができ、正規表現が再帰をサポートしていないため、正規表現のみを使用して正しく解析することは本質的に不可能です。

以下は、jsonを解析して検証するためのPCREソリューションです。https://stackoverflow.com/questions/2583472/regex-to-validate-json- まだ使ったこともなく、テストしたこともなくて効果があるという作家の言葉を受け入れなければならないのに...しかし、PCRE は、sed がサポートする基本または拡張正規表現で見つからない多くの操作を実行します。

とにかく、IMOでは、Perl、Python、またはawkとその言語のjson解析ライブラリのいずれか、または専用のjson解析ツールを使用することをお勧めします。ここではいくつか言及されています。

https://stackoverflow.com/questions/3858671/unix-command-line-json-parser

これらの1つは、シェルスクリプトで使用するためにJSON入力からデータを抽出するために使用できます。あるいは、プログラム全体をその言語で書くこともできます。

たとえば、jsonデータをpython -mjson.toolにパイピングすると、次のような結果が得られます。

$ echo "JSONDATAここ" python -m json.tools |
{
    "content_url": "http://files.eeehousenyc.com/1I3Q0Z1E2F3C/CastingBy-v12%20mixed.mov",
    "作成時間": "2012-08-27T20:04:27Z",
    "削除_at":空、
    "download_url": "http://files.eeehousenyc.com/1I3Q0F3C/download/CastingBy-v12%20mixed.mov",
    "gauge_id": 空、
    "href": "http://my.cl.ly/items/2840",
    "アイコン": "http://my.cld.me/images/item-types/video.png",
    「身分証明書」:21462840、
    "item_type": "動画",
    "name": "CastingBy-v12 mix.mov",
    「プライベート」:実際、
    "redirect_url": 空、
    "remote_url": "http://f.cl.ly/items/3D0P02b3e3p2I/CastingBy-v12%20mixed.mov",
    "ソース": "クラウド/1.5.4 CFNetwork/520.4.3 ダーウィン/11.4.0 (x86_64) (MacPro5%2C1)",
    「購読中」:実際には、
    "updated_at": "2012-08-27T20:13:38Z",
    "url": "http://files.housenyc.com/1I3E2F3C",
    「ビューカウンター」:2
}

その後、次のように入力をsedにパイプできます。

$ echo "JSONDATAHERE" | python -m json.tool | sed -n -e '/"name":/ s/^.*"\(.*\)".*/\1/p'
CastingBy-v12 mixed.mov

sedスクリプトは、正規表現の貪欲な特性に依存して、含まれる"行の最後から2番目の文字と最後の文字の間のすべての内容を抽出します。 ""name":

おすすめ記事