AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 484149
Accepted
Rakib Fiha
Rakib Fiha
Asked: 2018-11-27 01:19:15 +0800 CST2018-11-27 01:19:15 +0800 CST 2018-11-27 01:19:15 +0800 CST

Como converter a saída do shell para JSON?

  • 772

Eu tenho essa saída a seguir e estou tentando convertê-la para o formato JSON api. quero saber como posso fazer.

 rock64@rockpro64:~$ sh MACscript.sh 
 eth0
   11:1d:11:11:11:1d
 lo
   00:00:00:00:00:00

Eu tenho que usar o script python ou posso fazer isso usando o script de shell?

Este é o meu script MACshell:

 rock64@rockpro64:~$ cat MACscript.sh 
 !/bin/bash
 getmacifup.sh: Print active NICs MAC addresses
 D='/sys/class/net'
 for nic in $( ls $D )
 do
   echo $nic
   if  grep -q unknown $D/$nic/operstate
   then
    echo -n '   '
    cat $D/$nic/address
  fi
 done
shell python
  • 2 2 respostas
  • 11099 Views

2 respostas

  • Voted
  1. Best Answer
    glenn jackman
    2018-11-27T03:45:26+08:002018-11-27T03:45:26+08:00

    Com o bash simples você poderia fazer:

    json=$(
        sh MACscript.sh | {
            pairs=()
            while read interface; read ether; do
                pairs+=("\"$interface\":\"$ether\"")
            done
            IFS=,
            echo "{${pairs[*]}}"
        }
    )
    echo "$json"
    

    saídas

    {"eth0":"11:1d:11:11:11:1d","lo":"00:00:00:00:00:00"}
    
    • 3
  2. BlackCrystal
    2018-11-27T02:11:21+08:002018-11-27T02:11:21+08:00

    você pode usar várias maneiras de obter seus valores json. bash, python, perl,.....
    você pode encontrar posts úteis sobre isso neste site. porém aqui está um exemplo:

      arr1=($( ls /sys/class/net))
      arr2=($( cat /sys/class/net/*/address ))
    
      vars1=(${arr1[@]})
      vars2=(${arr2[@]})
      len=${#arr1[@]}
    
      printf "{\n"
      printf "\t"'"data"'":[\n"
    
      for (( i=0; i<len; i+=1 ))
      do
      printf "\t{  "'"{#interface}"'":\"${vars1[i]}\",\t"'"{#address}"'":\"${vars2[i]}\"  
      }"
    
      if [ $i -lt $((len-1)) ] ; then
        printf ",\n"
      fi
      done
      printf "\n"
      printf "\t]\n"
      printf "}\n"
      echo  
    

    resultado:

    {
        "data":[
        {  "{#interface}":"eth0",       "{#address}":"00:50:56:a9:c0:81"  },
        {  "{#interface}":"lo", "{#address}":"00:00:00:00:00:00"  }
        ]
    }
    

    e você pode usar este site para validar seu json: https://codebeautify.org/online-json-editor

    • 0

relate perguntas

  • Como funciona este comando? mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -l 1234 > /tmp/f

  • FreeBSD's sh: funções de lista

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • o que grep -v grep faz

  • Como salvar um caminho com ~ em uma variável?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve