Sed

#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. Потонг поделился точной командой, которую я искал, даже ваше решение очень близко к моим требованиям, но оно не удаляло двойные кавычки, спасибо за ваше время и помощь 🙂