ภายใต้ * ระวังฉันจะค้นหาสตริงภายในไฟล์ภายในไดเรกทอรีได้อย่างไร


2

ฉันใช้ Ubuntu Linux และฉันใช้ bash จากกับ terminal emulator ทุกวันสำหรับงานหลายอย่าง

ฉันต้องการทราบวิธีการค้นหาสตริงหรือสตริงย่อยภายในไฟล์ที่อยู่ในไดเรกทอรีเฉพาะ

หากฉันรู้ว่าไฟล์ที่มีซับสตริงเป้าหมายของฉันฉันจะ cat ไฟล์และไพพ์ผ่าน grep ดังนั้น:

cat file | grep mysubstring

แต่ในกรณีนี้สตริงย่อยที่น่ารำคาญอาจอยู่ที่ใดก็ได้ภายในไดเรกทอรีที่รู้จัก

ฉันจะตามล่าสตริงย่อยได้อย่างไร

linux  grep 

1
เช่นเดียวกับบันทึกย่อ ... คุณไม่จำเป็นต้องไปป์ cat เพื่อ grep grep สามารถอ่านไฟล์ได้ดี
xenoterracide

คำตอบ:


11

ใช้สัญลักษณ์ตัวแทนเชลล์:

grep mysubstring *

หากคุณต้องการค้นหาไดเรกทอรีย่อยให้ใช้-rตัวเลือกเพื่อเรียกเก็บเงินคืนใน:

grep -r myssubstring .

หรือ grep -r ไดเรกทอรี
mysubstring

4
find -type f | xargs grep mysubstring

คำสั่งเหล่านี้ ( find, xargsและgrep) มีจำนวนมากของตัวเลือกเพื่อให้คุณสามารถปรับแต่งการดำเนินการนี้อย่างมีนัยสำคัญ


เพิ่ม-print0การค้นหาและ-0การ xargs ถ้าไฟล์ของคุณ / ไดเรกทอรีอาจมีช่องว่างในชื่อของพวกเขาfind -type f -print0 | xargs -0 grep mysubstring
ดั๊กแฮร์ริส

4

ว่าฉันต้องการหาไฟล์รหัสหลามทั้งหมดที่มีข้อความ "wiki" ภายใต้ไดเรกทอรี "~ / โครงการ" นี่คือสคริปต์:

grep -lir "wiki" ~/projects/**/*.py

ปรับสคริปต์ตามความต้องการเฉพาะของคุณ


2

ไม่ว่าคุณจะทำอย่างไรอย่าใช้ไฟล์ใน grep เวอร์ชันดั้งเดิมของคุณ

cat file | grep mysubstring

ทำได้ถูกต้องมากขึ้นเมื่อ

grep mysubstring file

1
แม้ว่าคุณจะพูดถูก แต่นี่ไม่ใช่คำตอบที่แท้จริงสำหรับคำถาม
xenoterracide

ทำไมคุณถึงบอกฉันนี้
Andy Lester

1

หากคุณไม่จำเป็นต้องทำในโหมดแบทช์คุณสามารถติดตั้งผู้บัญชาการเที่ยงคืน (mc) ก็สามารถค้นหาสตริงในไฟล์


1

หากคุณต้องการค้นหาไฟล์ทั้งหมดที่มีสตริงซ้ำจาก dir ปัจจุบันให้ใช้:

find . -type f -exec grep -l mysubstring {} \;

(ควรใช้กับ * ระวังที่สุด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.