用于在管道命令期间以图形方式选择行的 CLI 工具

用于在管道命令期间以图形方式选择行的 CLI 工具

有没有类似的工具选择我可以插入命令链,以便我为下一步选择(多条)行?

choose不幸的是,它不会“传递”您选择的行,相反,如果您执行命令,选择一行并尝试用它做一些事情,您得到的是:

% echo "a\tb\ncde\tf" | choose | wc
cde      f
       0       0       0

答案1

它是开源的,并且基本逻辑不是很复杂,因此您可以随时修改它。

将以下几行放入与choose.diff同一目录中的文件(例如 )中choose,然后运行patch -p1 < choose.diff​​:

--- a/choose
+++ b/choose
@@ -164,8 +164,8 @@ def do_it(auswahl):
     index = select_entry(auswahl,
                          header_text=u'Navigate by pressing ↑ and ↓, select by pressing Enter')

-    # print chosen string
-    print(orig_auswahl[index])
+    # return chosen string
+    return orig_auswahl[index]


 if __name__=="__main__":
@@ -179,7 +179,7 @@ if __name__=="__main__":
     sys.__stdin__ = sys.stdin = open('/dev/tty')
     os.dup2(sys.stdin.fileno(), 0)

-    do_it(auswahl)
+    choice = do_it(auswahl)

     #restore old stdout
     sys.stdout.flush()
@@ -190,3 +190,5 @@ if __name__=="__main__":
     sys.__stdout__ = sys.stdout = old_out
     sys.__stdin__ = sys.stdin = old_in
     sys.__stderr__ = sys.stderr = old_err
+
+    print choice

答案2

不确定这是否适合您,但如果是从文本流中选择行,sed应该总能帮到您。请查看以下示例:

我只想输出那些与某个正则表达式(regex)不匹配的行 - 在此示例中,省略所有包含单词“pipe”的行。

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed '/pipe/d'
this is a line
that is a line

在下一个中,仅输出包含单词“pipe”的行

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed '/pipe/!d'
this is a piped line
that is a line in a pipe

或者,仅输出第二行和第三行:

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed -n '2,3p'
that is a line
this is a piped line

还有更多示例和可能性...查看sed1行

当然,还有很多更强大的替代方案awkperl等等

答案3

您正在寻找fzf

它是一个用于命令行的交互式 Unix 过滤器,可以与任何列表一起使用;文件、命令历史记录、进程、主机名、书签、git 提交等。

请注意,除了箭头导航之外,您还可以通过编写表达式进行交互式过滤。您需要使用fzf/-m进行--multi多选。


另请参阅相关项目对于人们在 fzf 之上构建的工具,链接见自述文件的底部。

它现在在 debian 和 ubuntu 默认软件包中可用,但在 Debian 10 Buster 和 Ubuntu 19 或 20 之前,pick是最接近的类似物。

高度建议将 fzf 设置为默认历史记录选择器ctrl-r按键绑定说明在 readme 中,它们默认由手动安装脚本设置,而不是由 debian/ubuntu 软件包设置,这可以手动完成,适用于 bash/zsh/fish/vim。

重击:

将此行附加到 ~/.bashrc 以为 Bash 启用 fzf 键绑定: source /usr/share/doc/fzf/examples/key-bindings.bash

将此行附加到 ~/.bashrc 以启用 Bash 的模糊自动完成功能: source /usr/share/doc/fzf/examples/completion.bash

相关内容