Запустите jq в предпросмотре fzf с аргументами - PullRequest
0 голосов
/ 25 июня 2019

У меня есть некоторые данные json, и я хочу интерактивно запросить их с помощью fzf и jq, отправив данные через stdin и введя запрос jq в поле запроса fzf.

Моя попытка пока что показать один результат в окне, но редактирование содержимого окна запроса вместо этого приводит к пустым результатам.

fzf-tmux --preview 'jq "$@"  <<< {}'    <<<'[{"x": 1}, {"y": 2}]' 

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Если вы ожидаете, что $@ будет расширен оболочкой, тогда простое исправление - изменить цитату:

fzf-tmux --preview 'jq '"$@"' <<< {}'

Если, с другой стороны, вы хотите использовать функцию {q} в fzf, что, по-видимому, имеет место, то вам может не повезти, хотя это может быть связано с ошибкой в ​​fzf или несовместимостью между ними. JQ и FZF, я не могу сказать.

Навигация по путям

Предположим, $ JSON - это файл, содержащий один массив или объект JSON. Затем при выполнении следующего вы увидите пути на LHS и значение на выбранном пути на RHS:

jq -rc paths "$JSON" |
  fzf-tmux --preview 'x={}; jq "getpath($x)" '"$JSON" 
0 голосов
/ 20 июля 2019

Недавнее сообщение Hacker News об использовании fzf в качестве REPL заставило меня задуматься о том, что было бы замечательно также редактировать в реальном времени фильтры jq.Используя базовую реализацию из этой статьи, я получил:

echo '' | fzf --print-query --preview='jq {q} <(echo "[{\"x\": 1}, {\"y\": 2}]")'

Вы можете немного очистить цитату за счет некоторой детализации, изменив ее на:

(export json='[{"x": 1}, {"y": 2}]'; echo '' | fzf --print-query --preview='jq {q} <(echo $json)')

или (несколько безопаснее для неподтвержденного ввода):

(export json='[{"x": 1}, {"y": 2}]'; echo '' | fzf --print-query --preview='jq {q} <(printf "%s" "$json")')

Последний пример использования API StackExchange для получения этого сообщения:

(export json=$(curl -s --compressed -H "Accept-Encoding: GZIP" "<a href="https://api.stackexchange.com/2.2/posts/56744579?site=stackoverflow&filter=withbody">https://api.stackexchange.com/2.2/posts/56744579?site=stackoverflow&filter=withbody</a>"); echo '' | fzf --print-query --preview-window=wrap --preview='filter={q}; jq -M -r "${filter}" <(printf "%s" "$json")')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...