Заменить апостроф в JSON на апостроф, подходящий для curl через sed

#json #sed #replace #apostrophe

#json #sed #заменить #апостроф

Вопрос:

Мне нужно подготовить JSON, который содержит апостроф, для отправки через CURL. Пример JSON:

 {"myField":"Apos'test"}
 

Пример JSON, который мне нужен в качестве вывода:

 {"myField":"Apos'''test"}
 

Что я пробовал:

 sed -e "s/'/'\''/g" <<< {"myField":"Apos'test"}
 

который выводит:

 {myField:Apos'''test}
 

И я не понимаю, почему он удаляет двойные кавычки.

PS не обязательно использовать sed, подойдет любой другой стандартный инструмент Linux.

Комментарии:

1. Используйте jq : generate_post_data(){jq -n --arg v "$1" '[{ "myField": $v }]'} и затем используйте generate_post_data "Apos'test"

2. sh удаляет двойные кавычки, такие же, как и with echo {"myField":"Apos'test"} . Попробуйте вместо sed -e "s/'/'\''/g" <<< "{"myField":"Apos'test"}" этого .

Ответ №1:

попробуйте это:

 #/bin/bash
replacement=$((cat << EOT
{"myField":"Apos'test"}
EOT
) | sed "s|'|'\''|")
echo $replacement
 

вывод:

 {"myField":"Apos'''test"}
 

Ответ №2:

Это не так
, если это было потому, что вы использовали <<< , здесь , из которых «» пара была проанализирована, расширена и удалена оболочкой, в которой вы находитесь

 $ cat d
{"myField":"Apos'test"}

$ sed -E "s/'/'\''/g" d
{"myField":"Apos'''test"}