Ошибка команды 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
не имеет ничего общего с проблемой).