Como remover “” na lista de saída?

0

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?

    
por The One 03.08.2018 / 10:36

5 respostas

3

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
    
por 03.08.2018 / 10:38
1

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.

    
por 03.08.2018 / 10:38
1

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 " .

    
por 03.08.2018 / 11:32
1

usando o AWK,

  awk -F '"' '{if (NF==3) print $2}' file
  • usando como um delimitador
  • imprimindo o segundo arquivo $2
  • NF==3 se o número máximo de campos for igual a 3
por 03.08.2018 / 10:55
0
awk -F\" 'NF>1{print $2}' file
    
por 03.08.2018 / 11:30

Tags