Em geral, há formas mais apropriadas de analisar objetos JSON, mas como neste caso o objeto JSON é muito simples, você pode armazenar a saída de curl
em uma variável (o que é possível) e apenas usar o AWK:
var="$(curl ipinfo.io/"8.8.8.8" 2>/dev/null)"
<<<"$var" awk -F'"' '=="city"{printf("%s, ", )}=="region"{print }'
% var="$(curl ipinfo.io/"8.8.8.8" 2>/dev/null)"
% <<<"$var" awk -F'"' '=="city"{printf("%s, ", )}=="region"{print }'
Mountain View, California
No entanto, a menos que você queira usar a saída de curl
várias vezes, pode usar apenas um canal:
curl ipinfo.io/"8.8.8.8" 2>/dev/null | awk -F'"' '=="city"{printf("%s, ", )}=="region"{print }'
curl ipinfo.io/"8.8.8.8" 2>/dev/null | awk -F'"' '=="city"{printf("%s, ", )}=="region"{print }'
Mountain View, California
<<<
é uma forma de redirecionamento de entrada chamada "here string"; ele redireciona o STDIN de um comando do terminal para uma string.
O que acontece aqui é que $var
é expandido entre aspas duplas; o STDIN do comando AWK é redirecionado do terminal para a string expandida e o AWK, consequentemente, lê a string como seu arquivo de entrada.