我正在尝试解析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
ETC?)
请求的信息:
# 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 文件所用模式的任何文档,因此这里的解析完全是临时的。