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.