Como encontro uma substring em uma linha de comando?

1

Eu tenho alguns arquivos que contém uma entrada semelhante, como segue:

{"result":[]}
{"result":[{"alternative":[{"transcript":"I win","confidence":0.87958056},{"transcript":"when"},{"transcript":"Schwinn"},{"transcript":"Gwen"},{"transcript":"I went"}],"final":true}],"result_index":0}

Basicamente, há uma string que tem uma "confiança" associada a ela. Essa string sempre aparece antes da string "confidence". Nesse caso, a string de destino é "eu ganho". Usando ferramentas de linha de comando do Linux, como eu analisaria esse arquivo para obter a string de destino?

    
por user1515743 16.01.2016 / 06:44

2 respostas

1

A resposta "simples" é usar sed :

sed -n 's/.*\("[^"]*"\),"confidence".*//p' filename

Isso imprimirá "I win" . Para excluir as aspas (e obter apenas I win como a saída), mova as duas primeiras aspas duplas no comando fora dos parênteses:

sed -n 's/.*"\([^"]*\)","confidence".*//p' filename

A melhor resposta é obter uma ferramenta projetada para analisar dados JSON.

    
por 16.01.2016 / 07:09
1

É o JSON, e as ferramentas do Linux não são muito boas para trabalhar com o JSON. E as suas condições não são muito claras ... Mas este perl one-liner produz a partir do seu exemplo "eu ganho"

perl -0777 -nE 's/.*"(.+?)","confidence".*/$1/s; say'
    
por 16.01.2016 / 07:07