使用参数在fzf预览中运行jq

时间:2019-06-24 22:13:38

标签: jq fzf

我有一些json数据,我想通过stdin发送数据并在fzf查询框中键入jq查询,以使用fzf和jq交互式查询它。

到目前为止,我的尝试是在框中显示一个结果,但是编辑查询框的内容会将结果改为空白。

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

2 个答案:

答案 0 :(得分:1)

如果您期望import SwiftUI struct ContentView : View { var body: some View { PasswordGeneratorSettings(settingsConfiguration: PasswordGeneratorSettings.Settings.init(passwordLength: 20)) } } struct PasswordGeneratorSettings : View { @State var settingsConfiguration: Settings struct Settings { var passwordLength = UInt() } var body: some View { NavigationView { List { Slider(value: $settingsConfiguration.passwordLength) { pressed in Text("Password Length: \(settingsConfiguration.passwordLength)") } }.navigationBarTitle(Text("Settings")) } } } 被shell扩展,那么简单的解决方法就是修改引号:

$@

如果另一方面,您想使用fzf的fzf-tmux --preview 'jq '"$@"' <<< {}' 功能(似乎是这种情况),那么您可能不走运,尽管这是由于fzf中的错误还是某些原因引起的我不能说jq和fzf之间不兼容。

按路径导航

让我们假设$ JSON是一个包含单个JSON数组或对象的文件。然后,在运行以下命令时,您将看到LHS上的路径以及RHS上所选路径上的值:

{q}

答案 1 :(得分:0)

最近有Hacker News post关于使用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")')

使用StackExchange API检索此帖子的最终示例:

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