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.
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"
You can try using compgen.
For example:
compgen -ac | grep "svn"
This should be equivallent:
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
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.
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.
I didn't knew compgen, and would have suggested:
ls -d ${PATH//:/\/*svn* } 2>/dev/null
for bash.
${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.