2017-02-05 14 views
0

У меня есть данные, приведенные ниже, с другими строками данных в огромном файле, чтобы быть более конкретным. Это файл .json, я лишил весь файл, за исключением этого поймать.Заменить разделитель запятой двойных кавычек в скобках [] с помощью sed

данных:

  • , "значение": [ "АВС-ДЕ", "XYZ-МН"]
  • , "значение": [ "MNO-RS"], "sub_id ": 01
  • " value ":" [\ "NEW-XYZ \"] ","
  • , "value": ["ABC-DE", "XYZ-MN", "MNO-BE", " "FRS-ND"]

Я хочу, чтобы данные выглядели следующим образом:

  • , "значение": [ "ABC-DE, XYZ-MN"] - Изменены
  • , "значение": [ "MNO-RS"], "sub_id": 01-Unchanged
  • " значение ":" [\ "NEW-XYZ \"] " "- Unchnaged
  • ," значение ": [" ABC-DE, XYZ-MN, МНО-BE, FRS-ND"] - Изменены

до сих пор у меня есть этот кусок кода, однако это, кажется, заменяя целые файлы «» с, а не те, только в пределах []

sed 's/\(\[\|\","\|\]\)/\,/g' testfile_1.txt >testfile_2.txt 

Любая помощь будет большим

** Примечание: Отредактированный четвертое условие

Приветствия.

+0

Кванторы +, {п}, {п, т} и {п, } повторите предыдущий токен ноль или один раз, один или несколько раз, n раз, между n и m раз, и n или более раз, – clearlight

+0

sed по умолчанию BRE: Поведение sed по умолчанию для поддержки Basic Regular Expressions (BRE). Чтобы использовать расширенные функции, установите флаг -r (Linux) или -E (BSD) для использования ERE. – clearlight

+0

Другая вещь, которая пришла мне в голову, - это попробовать несколько проходов. Как один, чтобы удалить все кавычки, затем передать другой код, чтобы добавить их туда, где это необходимо? (daisychaining sed - другими словами). Я не знаю, эффективнее это или нет, во всяком случае, еще раз спасибо. Удачи! – clearlight

ответ

1

Это более жесткое решение, не содержащее жадных алгоритмов, но это похоже на это.

sed -e 's/\([^\[]*\"[A-Z\-]*\)\",\"\(.*\)/\1,\2/' 
+0

Спасибо @clearlight, но я нашел способ сделать это традиционным способом;) – Avin

+0

Это традиционное регулярное выражение POSIX, а не perl. Каково было ваше решение? Можете ли вы обновить свой вопрос? Также, если мой ответ хорош, нажмите √ отметьте галочкой рядом с ним. Благодаря! – clearlight

+0

Извините, я имею в виду, можете ли вы добавить свой ответ, чтобы мы могли увидеть другой способ его решения? Или традиционным, вы имеете в виду не-регулярное выражение? – clearlight

0

Спасибо за ваш вклад @clearlight

Вот мое решение проблемы с несколькими экземплярами;

sed -e ': a' -e 's/\(\[[^]]*\)","/\1,/' -e 't a' testfile_1.txt >testfile_2.txt 

Используя метку 'а' до конца метки 'а'

псевдокода:

while (not end of line){ replace "," with ' }