คุณจะค้นหาข้อความเฉพาะในประเภทไฟล์ที่ต้องการได้อย่างไร [ซ้ำ]


13

ซ้ำเป็นไปได้:
ฉันจะ grep ในไฟล์ต้นฉบับสำหรับข้อความได้อย่างไร

คำสั่งในการค้นหาข้อความที่ระบุในประเภทไฟล์ที่เฉพาะเจาะจงเรียกซ้ำภายใต้ไดเรกทอรีปัจจุบันคืออะไร?


สิ่งที่คุณต้องการกลับมา? บรรทัดที่ข้อความอยู่? ชื่อของไฟล์ที่ข้อความอยู่?
MaQleod

@MaQleod: นั่นจะเป็นสิ่งที่ดี (ชื่อไฟล์ + linenumber + snippet) ถ้าเป็นไปได้
ฟิลลิป

@slhck: ไม่ได้ติดตั้ง ack-grep ฉันไม่มีสิทธิ์ในการติดตั้ง
ฟิลลิป

1
คุณไม่ต้องการack-grepคุณสามารถใช้ตัวอย่างในคำถามเป็นการเริ่มต้น (เช่นเดียวกับที่ฉันพูด) คือfind | xargs | grepบรรทัด สำหรับเอาต์พุตเฉพาะman grepนั้นมีประโยชน์เสมอที่จะอ่าน
slhck

@slhck: ขอบคุณดังนั้นฉันทำgrep -r --include=*.<type> "<string>" .ซึ่งทำงานได้ น่าเสียดายที่ man page นั้นไม่ตรงไปตรงมามากในการพูดถึงจุดต่อท้าย
ฟิลลิป

คำตอบ:


11
find . -type f -name '*.extension' | xargs grep "string"

คำสั่งนี้จะวิ่งหาในไดเรกทอรีท้องถิ่น (.) สำหรับไฟล์ใด ๆ ที่มีชื่อตรงกับรูปแบบ * .extension แล้ววิ่งgrepสำหรับ "สตริง" เกี่ยวกับผลของการค้นหา โปรดทราบว่าการค้นหานั้นวนซ้ำโดยเนื้อแท้ ตราบใดที่คุณสามารถแยกความแตกต่างของไฟล์ที่คุณต้องการจากไฟล์ที่คุณไม่ได้ใช้ตามชื่อสิ่งนี้จะใช้ได้ผลกับคุณ


2
ตัวแบ่งนี้มีชื่อไฟล์ที่มีช่องว่างคุณควรใช้print0ตัวเลือกเพื่อความปลอดภัย
slhck

เพียง แต่find -print0จะไม่ได้ความช่วยเหลือยังใช้xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo

0

ในการแสดงชื่อไฟล์หมายเลขบรรทัดในไฟล์ที่ระบุและบรรทัดข้อความจะปรากฏขึ้น:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

มันจะทำงานในไดเรกทอรีปัจจุบันเท่านั้น แต่จะจัดรูปแบบให้คุณ

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