如何在命令行中查找子字符串?

如何在命令行中查找子字符串?

我有一些包含类似条目的文件,如下所示:

{"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'

相关内容