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


8

ในขณะที่ฉันใช้สองคำสั่งฉันแน่ใจว่าต้องมีวิธีที่ดีกว่า ...

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset

1
ไม่-name '*.[ch]'ทำงาน?
เกล็นแจ็

คำตอบ:


10

ack (หรือบน Debian / Ubuntu, ack-grep) จะไม่สนใจไฟล์ที่ไม่ได้มาเช่นการควบคุมเวอร์ชันหรือไบนารี มีประโยชน์มาก.

เพื่อค้นหาไฟล์. c และ. h ดังกล่าว:

ack-grep -i --cc "invalid preset"

--cc(รูปแบบอีกต่อไป--type cc) เพียง แต่ดูที่ .c .h & .xs ไฟล์ ack-grep --help typeรายการเต็มรูปแบบของประเภทไฟล์ที่สามารถดูได้ด้วย ส่วนใหญ่คุณไม่จำเป็นต้องใช้--typeมันเป็นพิเศษเพราะโดยทั่วไปจะมีเฉพาะไฟล์ที่จะค้นหาแล้วไฟล์ที่คุณจะไม่เห็นตามค่าเริ่มต้นเช่นไบนารีไฟล์สำรองข้อมูลและไฟล์ควบคุมเวอร์ชัน


5

grepโปรแกรมตัวเองสามารถค้นหาซ้ำและยังรับตัวเลือกในการค้นหาไฟล์บางอย่างเท่านั้น ต่อไปนี้เทียบเท่ากับสองfindคำสั่งของคุณ

grep -Ri --include=*.[ch] invalid\ preset .

สิ่งนี้ใช้ได้กับฉันเมื่อฉันกำจัดวงเล็บ
Mike

1

คำสั่ง find สามารถเรียกใช้ grep ได้

find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print

และความหลากหลายของมัน


เปลี่ยนเป็นรูปแบบที่ชัดเจน ;-)
Keith

0

ฉันสามารถเพิ่มสิ่งนี้ให้กับคุณ ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.