Usando jq :
jq -r '.[]' file
Usando egrep :
egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' file
ou
egrep -o '([0-9]+\.){3}[0-9]+' file
Usando grep :
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' file
Eu usei um comando para obter uma lista de IP do EC2.
O resultado até agora eu tenho é uma lista como esta:
[
"172.31.11.7",
"172.31.48.141",
"172.31.64.201",
"172.31.64.149",
"172.31.64.148",
"172.31.64.111"
]
Eu quero obter o resultado como:
172.31.11.7
172.31.48.141
172.31.64.201
172.31.64.149
172.31.64.148
172.31.64.111
Como posso fazer isso?
Os dados são um array JSON. Usando jq para extrair os elementos:
$ jq -r '.[]' file
172.31.11.7
172.31.48.141
172.31.64.201
172.31.64.149
172.31.64.148
172.31.64.111
Usando sed (que você não deve usar para analisar dados JSON):
$ sed -E '/[][]/d; s/^[[:space:]]*"//; s/",?//' file
172.31.11.7
172.31.48.141
172.31.64.201
172.31.64.149
172.31.64.148
172.31.64.111
O script remove linhas que contêm [ ou ] , remove o espaço à esquerda e aspas duplas e remove as aspas duplas e a vírgula à direita.
Para essa amostra,
cut -d'"' -sf2
seria o suficiente. Ele retorna a parte da linha entre a primeira e a segunda " de ocorrência e (com -s ) descarta as linhas que não contêm " .
usando o AWK,
awk -F '"' '{if (NF==3) print $2}' file
“ como um delimitador $2
NF==3 se o número máximo de campos for igual a 3 awk -F\" 'NF>1{print $2}' file
Tags json