Вы можете попробовать опцию grep, которая сообщает «конец параметров»
grep -- <string> <filename>
Это сообщит grep игнорировать следующие дефисы как параметры и передавать их как следующие элементы в командной строке
Другое решение с использованием jq
:
jq -j '.properties.id, ",",
.properties.Name, ",\"POLYGON((",
(.geometry.coordinates | flatten | map(tostring) | join(",")), "))\"\n"' < file.json
Вывод:
01,ABC,"POLYGON((103.770389070496,1.29248785539602,103.770414424306,1.29257488210121,103.770146603491,1.29263278185594,103.770073030489,1.29264869682434,103.769991818022,1.29273960058215))"
Для обработки JSON используйте инструмент JSON, например. jq(обычно это пакет в вашем дистрибутиве):
jq -j '.properties.id, ",", .([ .geometry.coordinates | recurse | numbers | tostring] | join(",")), "))\n"' < your_file
делает то, что вы хотите, для одной строки. Возможно, вам придется передать каждую строку отдельно, в зависимости от того, как на самом деле выглядит ваш файл.