sed, конвертировать одиночную обратную косую черту в двойную обратную косую черту

У меня есть строка json, у которой есть попурри из дважды сбежавших / одиночно экранированных символов новой строки. Json parser не позволяет своему строковому значению иметь одиночные обратные слэши.

Мне нужно равномерно заставить всех их удвоить побеги

Содержимое выглядит так:

this newline must not be changed ---- \\n this newline must be changed - \n 

Когда я запускаю команду sed,

  sed -i 's/([^\])\n/\\n/g' ~/Desktop/sedTest 

он ничего не заменяет

([^\]) , этот шаблон используется, чтобы не изменять \n который уже имеет еще одну обратную косую черту.

3 Solutions collect form web for “sed, конвертировать одиночную обратную косую черту в двойную обратную косую черту”

пытаться

 sed -i 's,\([^\\]\)\\n,\1\\\\n,' file sed -i 's,\([^\]\)\\n,\1\\\\n,' file 

где

  • \ должен бежать \\\\
  • \( .. \) захват картины
  • \1 справа – это первый захваченный рисунок.
  • вторая форма с одним \ in [^\] согласно предложению @cuonglm.

вам нужно сохранить шаблон, иначе он будет отброшен.

Учитывая ваш пример ввода:

 $ cat /tmp/foo this newline must not be changed ---- \\n this newline must be changed - \n 

Это похоже на то, что вы хотите:

 $ sed -e 's@\([^\]\)\\n@\1\\\\n@' /tmp/foo this newline must not be changed ---- \\n this newline must be changed - \\n 

С \n в LHS вы попытались совместить символ новой строки вместо буквального \n .

Пытаться:

 sed -e 's/\([^\]\)\(\\n\)/\1\\\2/g' file 

или короче с расширенным регулярным выражением:

 sed -E 's/([^\])(\\n)/\1\\\2/g' file 
  • замените '_' на ',' в файле, который содержит список имен файлов
  • Curl url txt file, но grep каждый URL отдельно от одного файла
  • Создание файлов из шаблонов, замещение в середине других слов
  • «Sed» переписать файл для отображения целых чисел и удалить оставшиеся символы
  • введите значение $ LINE вместо «$ LINE»
  • Как выполнить инструкцию IF из результата выполненной команды
  • Узнайте, на какой строке в текстовом файле соответствует слово
  • Как добавить новые строки из другого файла с помощью sed
  • ksh / bash Форматирование файлов через sed по файлу cat | команда sed
  • добавьте «#» в начале выбранных строк в файле
  • Найти и заменить слова в текстовом файле рекурсивно
  • Linux и Unix - лучшая ОС в мире.