Снять квадратные скобки с помощью sed - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь удалить квадратную скобку и преобразовать строки ниже:

{"id":1","color": ["green","red", "blue"]}, {"id":2, color:black}

становится:

{"id":1","color": "green,red,blue"}, {"id":2, color:black}

Я пробовал этот код, но все еще получаю ошибку:

sed: -e выражение # 1, символ 39: не соответствует) или)

sed 's/\("color"\):[\([a-z0-9]*\)]/\1:"\2"/g'

Как это исправить?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

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

sed ':a;s/\(\[[^][]*\)",[ \t]*"/\1,/;ta ; s/\("color"\):[ \t]*\[\([^][]*\)]/\1:\2/g;' file > newfile

См. онлайн-демо sed .

:a;s/\(\[[^][]*\)",[ \t]*"/\1,/;ta Подробности

  • :a - этикетка
  • s/\(\[[^][]*\)",[ \t]*"/\1,/:
    • \(\[[^][]*\) - находит и вводит в группу 1 любые 0 или более символов, кроме ] и [
    • ", - подстрока ",
    • [^ \t]* - ноль или более символов, кроме пробела и табуляции
    • " - " char
  • \1, - заменяет содержимое группы 1 + запятую
  • ta - цикл до метки :a, если на предыдущей итерации было совпадение.

s/\("color"\):[ \t]*\[\([^][]*\)]/\1:\2/g Подробности

  • \("color"\) - сопоставляет и фиксирует в группе 1 подстроку "color"
  • : - двоеточие
  • [ \t]* - 0+ пробелов или пробелов
  • \[ - [ char
  • \([^][]*\) - Группа 2: любые 0+ символов, кроме ] и [
  • ] - ] char
  • \1:\2 - заменяется значением группы 1, :, значением группы 2
  • g - все вхождения.
0 голосов
/ 17 апреля 2019

если ваши данные в файле 'd', попробуйте gnu sed:

sed -E 'h;s/.*\[([^]]*)\].*/\1/;s/"//g; G;s/(.*)\n(.*)\[[^]]*\](.*)/\2"\1"\3/' d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...