Khi tôi nhấn tab trong bảng điều khiển, tôi nhận được kết quả đầu ra này
Hiển thị tất cả 2957 khả năng? (y hoặc n)
Có cách nào để sử dụng grep
trên 2957 khả năng này không? Tôi muốn tìm kiếm tất cả các lệnh có từ "svn" trong đó.
Khi tôi nhấn tab trong bảng điều khiển, tôi nhận được kết quả đầu ra này
Hiển thị tất cả 2957 khả năng? (y hoặc n)
Có cách nào để sử dụng grep
trên 2957 khả năng này không? Tôi muốn tìm kiếm tất cả các lệnh có từ "svn" trong đó.
Câu trả lời:
Giải pháp là bash dựng sẵn compgen
. Để grep 'svn' từ tất cả các lệnh và bí danh lệnh có thể truy cập thông qua $PATH
, hãy nhập.
compgen -ac | grep svn
Bạn muốn tìm kiếm từ một tiền tố nhất định (ví dụ: tất cả các lệnh bắt đầu bằng ecrypt
)? Sử dụng các biểu thức thông thường. .
compgen -ac | grep "^ecrypt"
Bạn có thể thử sử dụng compgen
.
Ví dụ:
compgen -ac | grep "svn"
có thể {,.}*svn*
giúp đỡ ở đây, ví dụ ls -l /usr/bin/{,.}*svn*<tab>
.
Nhưng, hãy xem Zsh! Tại đây: http://www.jukie.net/bart/blog/zsh-tab-completion là một số ví dụ tuyệt vời về cách nó có thể giúp giảm kết quả hoàn thành tab của bạn. Điều này bao gồm cả phủ định, ví dụ: nếu bạn muốn tất cả các kết quả hoàn thành tab mà không có từ "foobar" hoặc tất cả các kết quả có chữ số chẵn ở vị trí đầu tiên, hoàn thành tab thư mục con và nhiều hơn nữa. Lý do tại sao tôi đổi thành zsh là chia sẻ lịch sử giữa tất cả các thiết bị đầu cuối mở.
Tôi không biết compgen và sẽ đề nghị:
ls -d ${PATH//:/\/*svn* } 2>/dev/null
cho bash.
${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.