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