Làm thế nào tôi có thể grep thông qua khả năng hoàn thành tab?


18

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 greptrê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:


21

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"

câu trả lời tuyệt vời, nhưng nếu một người muốn grep tab khả năng tự hoàn thành thì sao? Ý tôi là, nó không phải luôn luôn được kích hoạt bởi tên lệnh, mà còn bởi các tham số lệnh, v.v.
ChúZeiv


1

Điều này nên tương đương:

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

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

Rất giống với câu trả lời của totaam ngoài điều này giới hạn phạm vi của nó đối với các tệp thực thi (như Bash làm). Nhưng JJE compgenlà một dặm tốt hơn.


1

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ở.


0

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 /.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.