.*
следует [^-_./0-9a-zA-Z]
- и он не является необязательным. Поэтому что-то, кроме одного из этих символов (алфавиты, цифры, -
, _
, .
и /
) должны встречаться в имени файла один раз. Любой путь, состоящий только из этих символов, не будет напечатан.
Поэтому эти команды не обязательно должны выводить одинаковые результаты.
Вы можете использовать jq
для получения объектов 'keyData', а затем передать их вwhile read
:
jq -c '.responses[].keyData' file.json
{"algorithm":13,"flags":257,"protocol":3,"publicKey":"a1"}
{"algorithm":13,"flags":257,"protocol":3,"publicKey":"a4"}
{"algorithm":13,"flags":257,"protocol":3,"publicKey":"fa4"}
И оттуда:
jq -c '.responses[].keyData' file.json |
while read keydata; do curl --data "'$keydata'" http://example.com/service ; done
Если ввести исходную команду curl
, весь конвейер будет выглядеть так:
curl -v -X POST --data '{ "authToken": ".......", "clientTransactionId": "",}' https:/domain.tld/api/v1/json/keysList |
jq -c '.responses[].keyData' file.json |
while read keydata; do curl --data "'$keydata'" http://example.com/service ; done
Не забудьте изменить вторую команду curl
с фактическим URL-адресом, параметрами и т. д. перед выполнением. Если необходимо, вы можете добавить оператор echo
/ printf
перед командой curl
, чтобы увидеть, как будет выглядеть ваш запрос.
в качестве альтернативы вы можете использовать утилиту unixjtc
для просмотра keyData:
bash $ <file.json jtc -w'[responses][:][keyData]' -r
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "a1" }
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "a4" }
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "fa4" }
bash $
и подайте его для завивки:
bash $ <file.json jtc -w'[responses][:][keyData]' -r | while read keydata; do curl --data "'$keydata'" http://example.com/service ; done