У меня есть строка типа 'string1,string2,string3'
Я хочу преобразовать то же самое в ["string1","string2","string3"]
Я пробовал использовать
sed 's/\(,\)/"\1"/g'
Но он возвращаетсяstring1","string2","string3
решение1
Поскольку вы уже можете вставлять кавычки вокруг запятых, просто добавьте ["
and "]
в начале и в конце:
sed 's/^/["/; s/\(,\)/"\1"/g; s/$/"]/'
Пример:
$ echo string1,string2,string3 | sed 's/^/["/; s/\(,\)/"\1"/g; s/$/"]/'
["string1","string2","string3"]
решение2
Вот чистое решение на bash:
$ str='string1,string2,string3'
$ echo "[\"${str//,/\",\"}\"]"
["string1","string2","string3"]
Поскольку этот подход не требует никаких внешних утилит и подпроцессов, он должен быть быстрым.
Как это работает
Мы используем bashзамена шаблоначтобы заменить все запятые на ","
. Поскольку "
это активный символ оболочки, мы должны экранировать его в команде:
$ echo ${str//,/\",\"}
string1","string2","string3
Последний шаг — добавить ["
к началу и "]
концу строки. Таким образом:
$ echo "[\"${str//,/\",\"}\"]"
["string1","string2","string3"]