Shell_Shell 编程 (持续更新) 提取JSON 中指定字段的值

 

在平时工作中,我们有时候需要对JSON 的某一个字段进行提取,

 

样例数据 :

{"a1":22,"a2":"23"}
{"a2":"23","a1":2233,a3:"22"}
 

可以使用 grep 完成功能:

grep -Po 'test[" :]+\K[^"]+'  example.txt 

 

其中: 

P, --perl-regexp

      Interpret PATTERN as a Perl regular expression.  This is highly experimental and grep -P may warn of  nimplemented features.

 

test  : 为待提取的字段名
example.txt  : 需要处理的json文件

 

Tips:

1.此种方法只能适用于 简单类型的提取,并且数据是字符串类型,也就是  " "  (双引号)括起来 的数据 , a1字段 不满足要求

 

提取 a2 , 可行 

[cloudera-scm@app7 test]$ cat test.txt | grep -Po 'a2[" :]+\K[^"]+'
23
23

 

提取a1, 不可行

[cloudera-scm@app7 test]$ cat test.txt | grep -Po 'a1[" :]+\K[^"]+'
22,
2233,a3:

 

 

----------------   未完待续    -------------

 

 

 

 

我现在的项目结构为“project/ ├── include/ │ └── queue.h # 头文件 ├── src/ ├── main.c # 主程序 └── queue.c # 功能实现“且tasks.json文件为“{ "version": "2.0.0", "tasks": [{ "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应 "command": "gcc", // 要使用的编译器,C++用g++ "args": [ "${file}", "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out "${fileDirname}/${fileBasenameNoExtension}.exe", "-g", // 生成和调试有关的信息 "-m64", // 不知为何有时会生成16位程序而无法运行,此条可强制生成64位的 "-Wall", // 开启额外警告 "-static-libgcc", // 静态链接libgcc,一般都会加上 "-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这条会导致Win下输出中文乱码;繁体系统改成BIG5 "-D__USE_MINGW_ANSI_STDIO", // 用MinGW写C时留着,否则不需要,用于支持printf的%zd和%Lf等 ], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西 "type": "process", // process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍 "group": { "kind": "build", "isDefault": true // 不为true时ctrl shift B就要手动选择了 }, "presentation": { "echo": true, "reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档,即使设为never,手动点进去还是可以看到 "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义 "panel": "shared" // 不同的文件的编译信息共享一个终端面板 }, "problemMatcher":"$gcc" // 捕捉编译时终端里的报错信息到问题面板中,修改代码后需要重新编译才会再次触发 // 本来有Lint,再开problemMatcher就有双重报错,但MinGW的Lint效果实在太差了;用Clangd可以注释掉 }] }”而launch.json为“{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "internalConsoleOptions": "neverOpen", "MIMode": "gdb", "miDebuggerPath": "gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "Compile" }, { "name": "C/C++ Runner: Debug Session", "type": "cppdbg", "request": "launch", "args": [ "" ], "stopAtEntry": false, //D:\\Code\\VScode\\algorithm "cwd": "D:\\Code\\VScode\\algorithm", "environment": [], //D:\\Code\\VScode\\algorithm\\build\\Debug\\outDebug "program": "D:\\Code\\VScode\\algorithm\\build\\Debug\\outDebug", "internalConsoleOptions": "openOnSessionStart", "MIMode": "gdb", "miDebuggerPath": "gdb", "externalConsole": false, "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }”现在试图使用vscode调试c代码,且项目中包含多个.c与.h文件请帮我修订tasks.json文件与launch.json问价使其能够完成多个文件的调试
最新发布
03-20
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值