Como extrair uma string com base em uma correspondência de expressão regular de um arquivo não formatado

1

Eu tenho um arquivo não formatado retornado de uma consulta SQL, a partir da qual preciso encontrar uma correspondência de expressão regular e extrair uma sequência numérica a seguir. O número está entre duas aspas duplas. Observe que pode haver mais de uma ocorrência de correspondência por linha. Existem outros caracteres especiais no arquivo que devem ser ignorados. Aqui está o arquivo de exemplo:

{ "_id" : "66941672632817171654", "title" : "Some Name (Central)", "stationNameAssoc" : [ { "stationId" : "6248915749115539177", "stationName" : "Default" } ] }
{ "_id" : "4455677484649934117", "title" : "Some Name (Mountain)", "stationNameAssoc" : [ { "stationId" : "7597999415247634177", "stationName" : "Default" } ] }

A partir disso, desejo extrair um valor numérico após "stationId" excluindo aspas, por exemplo, 7597999415247634177. Como você faria isso usando awk ou bash? obrigado

    
por user3062521 12.12.2016 / 23:35

3 respostas

1

usando uma ferramenta Json chamada json ( link )

$ json -ga 'stationNameAssoc.[0].stationId' < input
6248915749115539177
7597999415247634177

ou use-o passo a passo:

cat input | json -ga 'stationNameAssoc' | json -ga stationId

documentação em: link

se não estiver instalado:

install node
and sudo npm install -g json
    
por 17.01.2017 / 12:39
1

Outra solução de analisador JSON, usando jq :

$ jq -r '.stationNameAssoc[0].stationId' data.json
6248915749115539177
7597999415247634177

Ele busca os valores da entrada stationId do primeiro (e único) item da matriz em cada matriz stationNameAssoc .

    
por 24.01.2017 / 23:17
0
awk -F\" '{for(i=1;i<=NF;i++)if($i~/Id/){print $(i+2);next}}' input.txt
    
por 13.12.2016 / 01:23