Разбить значение в переменной с использованием другой строки и сохранить в массиве (Bash) - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть переменная Diagnostics , имеющая значение, как показано ниже:

echo $diagnosisCodes
{"code":"some code1","codeSet":"some set1","description":"some description1"} {"code":"some code2","codeSet":"some set2","description":"some description2"} {"code":"some code3","codeSet":"some set3","description":"some description3"}

Я хочу разделить их, используя разделитель "} {", чтобы я получил 3 разных значения и затем сохранилих в массиве (в bash).

Я нашел решение, используя следующую команду (предложенную Incrivel Monstro Verde в комментариях):

IFS='|' read -r -a array <<< $(echo $string | sed 's/{"code/|"code/g;s/\"}/"/g')

Но это решение не сработало бы, если бы мойСтрока имеет атрибут codeSet, который стоит перед атрибутом code.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Попробуйте это

#!/bin/bash

string='{"code":"some code1","codeSet":"some set1","description":"some description1"} {"code":"some code2","codeSet":"some set2","description":"some description2"} {"code":"some code3","codeSet":"some set3","description":"some description3"}'
var="${string//\} {/$'|'}" #replace '} {' with '|' , works for one space only between '} {'
IFS='|' read -r -a array <<< $(echo $var | sed 's/{//g;s/}//g')
for i in "${array[@]}"
  do
    echo $i
  done
0 голосов
/ 29 ноября 2018

Вы можете использовать читать:

#!/bin/bash

string='{"code":"some code1","codeSet":"some set1","description":"some description1"} {"code":"some code2","codeSet":"some set2","description":"some description2"} {"code":"some code3","codeSet":"some set3","description":"some descripti

IFS='{' read -r -a array <<< $(echo $string | sed 's/}//g')

echo "${array[1]}"
echo "${array[2]}"
echo "${array[3]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...