Как я могу выполнить grep через возможности завершения вкладок?

16

Когда я нажимаю вкладку в консоли, я получаю этот вывод

Display all 2957 possibilities? (y or n)

Можно ли использовать grep для этих возможностей 2957? Я хотел бы найти все команды со словом «svn» в них.

    
задан UAdapter 03.01.2012 в 10:54
источник

6 ответов

19

Решение - bash builtin compgen . Чтобы grep 'svn' из всех доступных команд и псевдонимов команд, доступных через $PATH , введите.

compgen -ac | grep svn

Хотите выполнить поиск с определенного префикса (например, все команды, начинающиеся с ecrypt )? Используйте регулярные выражения. .

compgen -ac | grep "^ecrypt"
    
ответ дан Jjed 03.01.2012 в 11:04
источник
2

Вы можете попробовать использовать compgen .

Например:

compgen -ac | grep "svn"
    
ответ дан Rajesh Pantula 03.01.2012 в 11:16
1

Это должно быть равносильно:

for x in 'echo $PATH | sed 's/:/ /g''; do ls $x | grep svn; done
    
ответ дан totaam 03.01.2012 в 11:06
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Очень похоже на ответ totaam, кроме этого ограничивает его область применения к исполняемым файлам (как это делает Bash). Но JJE compgen на другую милю лучше.

    
ответ дан Oli 03.01.2012 в 11:21
1

возможно, {,.}*svn* помогает здесь, например. ls -l /usr/bin/{,.}*svn*<tab> .

Но посмотрите на Zsh! Здесь: Ссылка - это отличные примеры того, как это может помочь уменьшить результаты завершения табуляции. Это включает также отрицание, например. если вам нужны все результаты завершения табуляции без слова «foobar» или все результаты с четными цифрами в первую очередь, заполнение вкладки подкаталога и многое другое. Причина, по которой я изменилась на zsh, - это обмен историей между всеми открытыми терминалами.

    
ответ дан math 03.01.2012 в 12:21
0

Я не знал 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 /.
    
ответ дан user unknown 03.02.2012 в 22:43