我有一些包含类似条目的文件,如下所示:
{"result":[]}
{"result":[{"alternative":[{"transcript":"I win","confidence":0.87958056},{"transcript":"when"},{"transcript":"Schwinn"},{"transcript":"Gwen"},{"transcript":"I went"}],"final":true}],"result_index":0}
基本上有一个字符串与它相关联的“置信度”。该字符串始终出现在字符串“confidence”之前。在本例中,目标字符串是“I win”。使用命令行linux工具,我将如何解析这个文件来获取目标字符串?
答案1
“简单”的答案是使用sed
:
sed -n 's/.*\("[^"]*"\),"置信度".*/\1/p'文件名
这将打印"I win"
.要排除引号(并得到I win
与输出一样的结果),请将命令中的前两个双引号移到括号之外:
sed -n 's/.*"\([^"]*\)","置信度".*/\1/p'文件名
更好的答案是获取一个专门用于解析 JSON 数据的工具。
答案2
它是 JSON,而 Linux 工具不太适合处理 JSON。而且你的条件不是很清楚......但是这个 perl 单行代码是从你的示例字符串“I win”生成的
perl -0777 -nE 's/.*"(.+?)","confidence".*/$1/s; say'