json 파일과 같은 두 항목을 얻는 방법

json 파일과 같은 두 항목을 얻는 방법

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 파일에 사용된 스키마에 대한 문서를 찾지 못했기 때문에 여기에서의 구문 분석은 전적으로 임시적입니다.

관련 정보