ในขณะที่ฉันใช้สองคำสั่งฉันแน่ใจว่าต้องมีวิธีที่ดีกว่า ...
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
ในขณะที่ฉันใช้สองคำสั่งฉันแน่ใจว่าต้องมีวิธีที่ดีกว่า ...
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
คำตอบ:
ack (หรือบน Debian / Ubuntu, ack-grep) จะไม่สนใจไฟล์ที่ไม่ได้มาเช่นการควบคุมเวอร์ชันหรือไบนารี มีประโยชน์มาก.
เพื่อค้นหาไฟล์. c และ. h ดังกล่าว:
ack-grep -i --cc "invalid preset"
--cc
(รูปแบบอีกต่อไป--type cc
) เพียง แต่ดูที่ .c .h & .xs ไฟล์ ack-grep --help type
รายการเต็มรูปแบบของประเภทไฟล์ที่สามารถดูได้ด้วย ส่วนใหญ่คุณไม่จำเป็นต้องใช้--type
มันเป็นพิเศษเพราะโดยทั่วไปจะมีเฉพาะไฟล์ที่จะค้นหาแล้วไฟล์ที่คุณจะไม่เห็นตามค่าเริ่มต้นเช่นไบนารีไฟล์สำรองข้อมูลและไฟล์ควบคุมเวอร์ชัน
grep
โปรแกรมตัวเองสามารถค้นหาซ้ำและยังรับตัวเลือกในการค้นหาไฟล์บางอย่างเท่านั้น ต่อไปนี้เทียบเท่ากับสองfind
คำสั่งของคุณ
grep -Ri --include=*.[ch] invalid\ preset .
คำสั่ง find สามารถเรียกใช้ grep ได้
find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print
และความหลากหลายของมัน
ฉันสามารถเพิ่มสิ่งนี้ให้กับคุณ ~/.bashrc
alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
-name '*.[ch]'
ทำงาน?