Ошибка команды sed с использованием фигурных скобок и двойных кавычек

У меня есть файл со следующим содержанием

(ABC)

Я создаю переменную env с помощью следующей команды

setenv ABC  {"a":{"b":"http://c","d":"http://e"}}

Затем я запускаю команду sed

sed 's|(ABC)|('"$ABC"')|' myFile

Это возвращается с этим

a:b:http://c a:d:http://e

Должен на самом деле вернуть это

{"a":{"b":"http://c","d":"http://e"}

Любые идеи о том, что мне не хватает

1 ответ

Решение

Поскольку фигурные скобки и двойные кавычки являются метасимволами в оболочке C, вы должны либо экранировать их обратной косой чертой, например так:

setenv ABC \{\"a\":\{\"b\":\"http://c\",\"d\":\"http://e\"\}\}

или, лучше, оберните все значение в одинарные кавычки:

setenv ABC '{"a":{"b":"http://c","d":"http://e"}}'

В любом случае вы получите:

$ echo "$ABC"
{"a":{"b":"http://c","d":"http://e"}}

Напротив, если вы не избежите или не процитируете значение в setenv Заявление, как вы сделали в вопросе, вы получите:

$ echo "$ABC"
a:b:http://c a:d:http://e

и вот что ты получал (sed не имеет ничего общего с проблемой).

Другие вопросы по тегам