Обратите внимание, что вам, вероятно, следует рассмотреть возможность использования инструмента, подобного jq
, для редактирования файлов JSON. Но я полагаю, у вас есть веская причина для использования sed
, поэтому у вас есть пара проблем.
Во-первых, вы пытаетесь использовать функции GNU sed в вашей версии OS для Mac OS X, которая не имеет этих функций. Если вы хотите использовать GNU sed в Mac OS X, установите его:
▶ brew install gnu-sed
Исправление кода для GNU sed (а также для других рекомендаций руководства по стилю Bash о цитировании строк):
cat > FILE <<EOF
"location":"<48.777098,9.181301> - 150.0m",
"message":"Hello there!",
"heading": "34",
EOF
placeLocation=myPlaceLocation
vehicleHeading=myVehicleHeading
message=myMessage
file=FILE
gsed -i -e '/location/c\' -e '"location": "'"$placeLocation"'",' "$file"
gsed -i -e '/heading/c\' -e '"heading": "'"$vehicleHeading"'",' "$file"
gsed -i -e '/message/c\' -e '"message": "'"$message"'",' "$file"
Как отмечено в руководстве GNU sed , использование нескольких команд -e
в одной строке с командой c\
является расширением GNU.
Если вы хотите использовать sed в Mac OS X, просто можете написать это так:
sed -i '' '
s/"location".*/"location": "'"$placeLocation"'",/
s/"heading".*/"heading": "'"$vehicleHeading"'",/
s/"message".*/"message": "'"$message"'",/
' "$file"
Но учтите, что вам придется санировать входные данные, если вам нужен код, устойчивый ко всем входным данным.