Awk
如何只獲取兩個類似 json 的文件
我正在嘗試解析
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 文件的架構的文件,所以這裡的解析完全是臨時的。