#curl #awk #sed #jq
Вопрос:
Я выполняю приведенную ниже команду , чтобы получить конкретную строку из вывода json, здесь я заполняю строку «uri», которая печатает все необходимые поля.
# curl -X GET --insecure -H "$(cat /token/.bearer_header)" http://localhost:3000/api/search?query=% | sed -e 's/[{}]/''/g' | awk -v RS=',"' -F: '/^uri/ {print $2}' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2410 0 2410 0 0 40166 0 --:--:-- --:--:-- --:--:-- 40847 "ab/any-dashboard" "ab/many-dashboard" "ab/too-dashboard" "ab/maximum-dashboard" "ab/minimum-dashboard"
теперь я хочу заменить, например, «ab/any-dashboard» только на любую панель управления, что означает, что команда выше должна выводиться как показано ниже
any-dashboard many-dashboard too-dashboard maximum-dashboard minimum-dashboard
может ли кто-нибудь помочь мне здесь, я попробовал несколько вещей с sed, но не получил точного результата, и у меня нет знаний в JQ.
С уважением, СЭМ
Комментарии:
1. Отредактируйте свой вопрос так, чтобы выдавался фактический JSON вместо того, что осталось после обработки с помощью sed и awk
Ответ №1:
Это может сработать для вас (GNU sed):
sed -nE 's#".*/(.*)"#1#p' file
Отключите неявную печать -n
и включите расширенное регулярное -E
выражение ( -r
на некоторых платформах).
Сопоставьте шаблон с требуемой строкой, замените ее ожидаемой деталью и распечатайте результат.
N. B. (...)
В LHS команды подстановки называется обратной ссылкой и может быть вызвана в RHS. Также использование #
в качестве альтернативного разделителя, а не обычного /
, который является частью соответствия.
Комментарии:
1. это было точное требование, и спасибо вам за ваше объяснение, это, несомненно, поможет мне в будущем.
Ответ №2:
Если приведенная ниже инструкция awk (для которой требуется GNU awk для многозначных RS) находится в конце командной строки, попробуйте добавить эту функцию gsub и посмотрите, получите ли вы то, что хотите:
Current: awk -v RS=',"' -F: '/^uri/ {print $2}'
Изменить на:
awk -v RS=',"' -F: '/^uri/ {gsub("/","-",$2);print $2}'
Комментарии:
1. Потонг поделился точной командой, которую я искал, даже ваше решение очень близко к моим требованиям, но оно не удаляло двойные кавычки, спасибо за ваше время и помощь 🙂