#linux #unix #curl #awk #sed
#linux #unix #curl #awk #sed
Вопрос:
Я пишу скрипт bash для запуска на устройстве Linux, поэтому у меня нет доступа к установке jq, мне нужно иметь возможность использовать собственные инструменты Linux
curl --location --request POST "https://api-mp.meraki.com/api/v1/networks/12345/switch/stacks/12345/routing/interfaces"
--header "X-Cisco-Meraki-API-Key: 123key"
--header "Content-Type: application/json"
--data '{
"name": "L3 int",
"subnet": "192.168.249.0/24",
"interfaceIp": "192.168.249.2",
"multicastRouting": "disabled",
"vlanId": 140,
"ospfSettings": {
"area": "0",
"cost": 1,
"isPassiveEnabled": true
}
}' | sed -n 's|.*"interfaceID":"([^"]*)".*|1|p' > $newVar
ответ от сервера возвращает это:
{
"interfaceId": "12345",
"name": "PA L3 DR Int",
"subnet": "192.168.249.0/24",
"interfaceIp": "192.168.249.2",
"multicastRouting": "disabled",
"vlanId": 140,
"ospfSettings": {
"area": "0",
"cost": 1,
"isPassiveEnabled": true
}
}
Затем мне нужно иметь возможность доступа к новой переменной InterfaceID в параметре строки запроса
Ответ №1:
Вы просто неправильно указали регистр ( ID
vs Id
в interfaceId
) и забыли о пробеле после :
, но вы были близки к этому:
$ sed -n 's|.*"interfaceId": *"([^"]*)".*|1|p' file
12345
Используйте cat file
вместо вашей curl
команды, чтобы показать, как сохранить это в переменной на случай, если вы не знаете:
$ var=$(cat file | sed -n 's|.*"interfaceId": *"([^"]*)".*|1|p')
$ echo "$var"
12345
Ответ №2:
Не могли бы вы, пожалуйста, попробовать следующее. Успешно протестировано по ссылке https://ideone.com/EsdCQp
your_command |
awk '
/"interfaceId": "/{
gsub(/[^0-9] |",/,"")
print
}
'