Awk

如何只獲取兩個類似 json 的文件

  • October 25, 2019

我正在嘗試解析Sublime Text 3會話文件:Session.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"
                                               },
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 文件的架構的文件,所以這裡的解析完全是臨時的。

引用自:https://unix.stackexchange.com/questions/548806