Здравствуйте, я использую curl, чтобы получить некоторую информацию, которую мне нужно очистить. Это из команды curl:
{"ip":"000.000.000.000","country":"Italy","city":"Milan","longitude":9.1889,"latitude":45.4707, etc..
Мне нужно было бы получить «Ита» в качестве вывода, это первые три буквы страны.
После прочтения регулярное выражение sed JSON я попытался адаптироваться, в результате чего
sed -e 's/^.*"country":"[a-zA-Z]{3}".*$/\1/
но это не сработает.
Не могли бы вы помочь?
Не рекомендуется. Используйте парсер JSON, например jq





Используя jq, вы можете:
curl .... | jq -r '.country[0:3]'
Если вам нужно набор страну до первых 3 символов,
jq '.country = .country[0:3]'
какой-то довольно продвинутый bash:
{
read country
read city
} < <(
curl ... |
jq -r '.country[0:3], .city[0:3]'
)
Потом:
$ echo "$country $city"
Ita Mil
спасибо большое стало намного легче! Могу я спросить вас, как бы вы присвоили, например, «Ита» и «Мил» двум разным переменным, запустив команду curl только один раз?
я просто получаю сообщение об ошибке: синтаксическая ошибка рядом с неожиданным токеном <' : } < <(' <
Вам нужно использовать bash или ksh (или, может быть, zsh), но не sh. < <(...) — это перенаправление с Замена процесса
Используйте
sed -E 's/.*"country":"([a-zA-Z]{3}).*/\1/' file. Или,grep -Po '"country":"\K[A-Za-z]{3}' file