如何通过制表符补全选项进行grep搜索?

当我在控制台中按下Tab键时,会得到以下输出:
显示所有2957个可能性?(是或否)
有没有办法在这2957个可能性上使用grep命令?我想要搜索所有包含单词"svn"的命令。
6个回答

解决方案是bash内置的compgen命令。要从通过$PATH可访问的所有命令和命令别名中grep 'svn',请键入。
compgen -ac | grep svn

想要从特定前缀进行搜索(例如以ecrypt开头的所有命令)吗?使用正则表达式
compgen -ac | grep "^ecrypt"

非常好的回答,但是如果有人想要自己搜索制表符补全的可能性呢?我的意思是,它不仅仅由命令名称触发,还可以由命令参数等触发。 - UncleZeiv

你可以尝试使用compgen
例如:
compgen -ac | grep "svn"

这应该是等价的:
for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

非常类似于 totaam 的回答,除了这个限制了它的范围只针对可执行文件(就像 Bash 一样)。但是 JJE 的 compgen 更好得多。

也许在这里可以用{,.}*svn*,例如ls -l /usr/bin/{,.}*svn*<tab>
但是,看看Zsh吧!在这里:http://www.jukie.net/bart/blog/zsh-tab-completion有一些很好的例子,它可以帮助减少您的标签完成结果。这还包括否定,例如如果您想要所有不包含单词“foobar”的标签完成结果,或者所有以偶数位数字开头的结果,子目录标签完成等等。我改用zsh的原因是为了在所有打开的终端之间共享历史记录。

我之前不知道compgen,我本来会建议:
ls -d ${PATH//:/\/*svn* } 2>/dev/null

适用于bash。
${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.