How can I grep through tab completion possibilities?

When I press tab in a console I get this output

Display all 2957 possibilities? (y or n)

Is there any way to use grep on these 2957 possibilities? I would like to search for all commands with the word "svn" in them.


Solution 1:

The solution is the bash builtin compgen. To grep 'svn' from all available commands and command aliases accessible through $PATH, type.

compgen -ac | grep svn

Want to search from a certain prefix (eg all commands that start with ecrypt)? Use regular expressions..

compgen -ac | grep "^ecrypt"

Solution 2:

You can try using compgen.

For example:

compgen -ac | grep "svn"

Solution 3:

This should be equivallent:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

Solution 4:

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

Very similar to totaam's answer apart from this limits its scope to executables (as Bash does). But JJE's compgen is another mile better.

Solution 5:

maybe {,.}*svn* helps here, e.g. ls -l /usr/bin/{,.}*svn*<tab>.

But, have a look on the Zsh! Here: http://www.jukie.net/bart/blog/zsh-tab-completion are some great examples how it can help to reduce your tab completion results. This includes also negation, e.g. if you want all tab-completion results without the word "foobar", or all results with even digits in the first place, subdirectory tab-completion and much more. The reason why I changed to zsh was history sharing between all open terminals.