jsonファイルなどの2つのエントリを取得する方法

jsonファイルなどの2つのエントリを取得する方法

Sublime Text 3セッションファイルを解析しようとしています。セッション.sublime_session。 JSON形式と同様の内容で構成されています。

使用:

cat Session.sublime_session | grep -A13 "\"file\":"

次のようにリスト(各ファイルに対して繰り返し)を簡単に取得できます。

    "file": "/F/myHW/check_usb_switch.sh",
    "semi_transient": false,
    "settings":
    {
            "buffer_size": 873,
            "regions":
            {
            },
            "selection":
            [
                    [
                            872,
                            872
                    ]
--

次のリストをどのように取得できますか?

/F/myHW/check_usb_switch.sh:872
...

(他のツールや適切なツールがありますか?(例:jqなど? )


要求された情報:

# Start of file:
{
        "folder_history":
        [
        ],
        "last_version": 3176,
        "last_window_id": 9,
        "log_indexing": false,
        "settings":
        {
                "new_window_height": 912.0,
                "new_window_settings":
                {
                        "auto_complete":
                        {
                                "selected_items":
                                [
                                        [
                                                "input",
                                                "input_stream"
                                        ],
...
        },
        "windows":
        [
                {
                        "auto_complete":
                        {
                                "selected_items":
                                [
                                        [
                                                "file",
                                                "fileName"
...
                                        [
                                                "json",
                                                "json_response"
                                        ]
                                ]
                        },
                        "buffers":
                        [
                                {
                                        "file": "/F/xxxx.sh",
                                        "settings":
                                        {
                                                "buffer_size": 7040,
                                                "encoding": "UTF-8",
                                                "line_ending": "Unix"
                                        }
                                },
                                {
                                        "file": "/C/xxxx.txt",

リクエスト2:

                                                {
                                                        "buffer": 1,
                                                        "file": "/C/Users/xxxx/Desktop/tmp/xxxx.txt",
                                                        "semi_transient": false,
                                                        "settings":
                                                        {
                                                                "buffer_size": 6529,
                                                                "regions":
                                                                {
                                                                },
                                                                "selection":
                                                                [
                                                                        [
                                                                                3569,
                                                                                3569
                                                                        ]
                                                                ],
                                                                "settings":
                                                                {
                                                                        "syntax": "Packages/Text/Plain text.tmLanguage",
                                                                        "word_wrap": false
                                                                },
                                                                "translation.x": 0.0,
                                                                "translation.y": 0.0,
                                                                "zoom_level": 1.0
                                                        },
                                                        "stack_index": 46,
                                                        "type": "text"
                                                },

ベストアンサー1

jq -r '.windows[]|.buffers[]|.file' Session.sublime_session

これはJSONパーサーを使用して、Sublime Text 3セッションファイルに書き込まれた各ウィンドウの各バッファ内のすべてのjqノードを解析します。file

fileそのビットに関する情報と最初の整数を取得するには、selectionデータの他の場所を見つける必要があります。

jq -r '.windows[]|.groups[].sheets[]| "\(.file):\(.settings.selection[0][0])"' Session.sublime_session

このフィールドは、file最初のコマンドと比較して文書のまったく異なる場所から取得されます。

私が使用している小さなサンプルファイルでは、次のような結果が生成されることがあります。

/Users/kk/hello:18

出力として。

(macOSのセッションファイルでテストされ、helloホームディレクトリにあるファイルを呼び出しました。)

残念ながら、これらのJSONファイルで使用されているスキーマに関するドキュメントが見つからなかったため、ここでの解析は完全に一時的です。

おすすめ記事