ฉันต้องการค้นหาสตริงข้อความในไฟล์ทั้งหมดในไดเรกทอรี (และไม่ใช่ไดเรกทอรีย่อยของมันฉันรู้ว่า-r
ตัวเลือกทำเช่นนั้น แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ)
วิ่ง
grep "string" /path/to/dir
ฉันควรจะทำสิ่งนี้ได้ฉันอ่าน แต่มันทำให้ฉันมีข้อผิดพลาด:
grep: dir: เป็นไดเรกทอรี
ต่อไปฉันลองใช้
grep
ไฟล์หลาย ๆ ไฟล์grep "string" .bashrc .bash_aliases
ทำงานได้อย่างสมบูรณ์แบบgrep "string" .bash*
ทำงานตามที่ตั้งใจไว้ด้วยgrep "string" *
ให้ฉันข้อผิดพลาด:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
พิมพ์เฉพาะข้อผิดพลาดฉันไม่ได้เส้นที่ตรงกัน ฉันพยายามใช้-s
ตัวเลือก แต่ไม่มีประโยชน์
ดังนั้นคำถามของฉัน:
เหตุใดฉันจึงไม่สามารถใช้
grep
ในไดเรกทอรีเช่นเดียวกับใน (1) เมื่อฉันควรจะสามารถทำได้ ฉันเห็นว่าทำในตัวอย่างมากมายบนอินเทอร์เน็ต
แก้ไข : เมื่อฉันพูดว่า "ใช้ grep ในไดเรกทอรี" ฉันหมายถึง "ค้นหาไฟล์ทั้งหมดในไดเรกทอรีนั้นซึ่งไม่รวมไดเรกทอรีย่อย" ฉันเชื่อว่านี่คือสิ่งที่ grep ทำเมื่อคุณส่งไดเรกทอรีไปยังไฟล์แทนไฟล์ ฉันไม่ถูกต้องหรือไม่กรุณาให้คำอธิบายเกี่ยวกับงาน
grep
ที่จะอธิบายพฤติกรรมของคำสั่งใน (2)
แก้ไข : ให้ฉันเจาะจงมากขึ้น ทำไมไม่ใช้สัญลักษณ์เพื่อระบุหลายไฟล์เพื่อค้นหาในสำหรับการทำงานกับ.bash*
และไม่ได้มี*
หรือแม้กระทั่ง./*
?ฉันจะค้นหาไฟล์ทั้งหมดในไดเรกทอรี (และไม่ใช่ไดเรกทอรีย่อย) โดยใช้
grep
อย่างไร
grep "string" .bash*
เช่นกัน
grep "string" * .* 2>/dev/null
หรือgrep -s "string" * .*
*
รู้จักกันในชื่อ globbing Globbing ไม่รวมชื่อไฟล์ที่ขึ้นต้นด้วยจุดเช่น.bashrc
มาตรฐาน คุณสามารถตั้งค่าตัวเลือกของเชลล์เพื่อที่จะรวมไฟล์เหล่านี้ แต่คุณสามารถทำให้ตัวเองยุ่งเหยิงหากคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่ คำแนะนำที่ดีสำหรับการทำความเข้าใจ globing สามารถพบได้ที่นี่mywiki.wooledge.org/glob