Intereting Posts
Безопасно ли монтировать такую ​​же файловую систему ext4 в разных точках подключения? Как применять изменения в группе, не заканчивая сессию / протоколирование / закрытие программ? Есть ли способ найти, какое правило iptables отвечает за удаление пакета? Как удалить позиционный параметр из $ @ Веб-браузер Chromium: пользовательский / etc / chromium / политики / файл управляемых / политик Как запустить процесс, который хочет стать root из службы systemd, которая является обычным пользователем? есть ли разница между запуском приложения из nand и ramdisk? Почему заголовки ядра Linux содержат ссылки на несуществующие заголовки? Yum всегда перечисляет некоторые пакеты Скрипт CentOS / RHEL Init (pre-changeroot) Использование вложенного тройного выражения в командной строке .zshrc Для маршрутизации пользователей на Wi-Fi Использование zip-пакета для debian с паролем настроить exim для пересылки электронной почты системы (снаружи), на сервере с динамическим ip, за маршрутизатором DNS Что означает эта запись iptables?

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 который уже имеет еще одну обратную косую черту.

пытаться

 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