ฉันจะ grep ผ่านความเป็นไปได้ที่แล้วเสร็จของแท็บได้อย่างไร


18

เมื่อฉันกดแท็บในคอนโซลฉันได้รับผลลัพธ์นี้

แสดงความเป็นไปได้ทั้งหมด 2957 รายการ? (y หรือ n)

มีวิธีใดบ้างที่จะใช้grepกับความเป็นไปได้เหล่านี้ 2957? ฉันต้องการค้นหาคำสั่งทั้งหมดด้วยคำว่า "svn" ในพวกเขา

คำตอบ:


21

การแก้ปัญหาคือ compgenbuiltin หากต้องการ grep 'svn' จากคำสั่งที่มีอยู่ทั้งหมดและชื่อแทนคำสั่งที่สามารถเข้าถึงได้ผ่าน$PATHพิมพ์

compgen -ac | grep svn

ต้องการค้นหาจากคำนำหน้าบางคำ (เช่นคำสั่งทั้งหมดที่ขึ้นต้นด้วยecrypt) ใช่ไหม ใช้นิพจน์ทั่วไป .

compgen -ac | grep "^ecrypt"

คำตอบที่ดี แต่ถ้าต้องการ grep แท็บความเป็นไปได้ตัวเองเสร็จ? ฉันหมายถึงมันไม่ได้ถูกกระตุ้นจากชื่อคำสั่งเสมอไป แต่ยังรวมถึงพารามิเตอร์คำสั่ง ฯลฯ
UncleZeiv



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

คล้ายกับคำตอบของ totaam นอกเหนือจากข้อ จำกัด นี้ขอบเขตของการปฏิบัติการ (ตามที่ Bash ทำ) แต่ JJE compgenนั้นดีกว่าอีกหนึ่งไมล์


1

อาจจะ {,.}*svn*ls -l /usr/bin/{,.}*svn*<tab>ช่วยให้ที่นี่เช่น

แต่ดูที่ Zsh! ที่นี่: http://www.jukie.net/bart/blog/zsh-tab-completionเป็นตัวอย่างที่ดีว่าจะช่วยลดผลการเสร็จสิ้นแท็บของคุณได้อย่างไร ซึ่งรวมถึงการปฏิเสธเช่นหากคุณต้องการผลลัพธ์การเติมแท็บทั้งหมดโดยไม่มีคำว่า "foobar" หรือผลลัพธ์ทั้งหมดที่มีตัวเลขเป็นเลขคู่ตั้งแต่แรกแท็บไดเรกทอรีย่อยเสร็จสิ้นและอีกมากมาย เหตุผลที่ฉันเปลี่ยนเป็น zsh คือการแบ่งปันประวัติระหว่างเทอร์มินัลที่เปิดอยู่ทั้งหมด


0

ฉันไม่รู้จัก compgen และจะแนะนำ:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

สำหรับทุบตี

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.