Bagaimana saya bisa mendapatkan file sumber untuk beberapa teks?

8

Saat ini saya menggunakan dua perintah, saya yakin pasti ada cara yang lebih baik ...

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
sumber
1
apakah -name '*.[ch]'bekerja?
glenn jackman

Jawaban:

10

ack (atau, pada Debian / Ubuntu, ack-grep) akan mengabaikan file non-sumber seperti kontrol versi atau binari. Sangat berguna.

untuk mencari file .c dan .h saja, seperti di atas:

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

yang --cc(bentuk lagi adalah --type cc) hanya terlihat pada c H & .xs file. Daftar lengkap tipe file dapat dilihat ack-grep --help type. Biasanya, Anda tidak akan memerlukannya --type, karena umumnya file-file tersebut hanya akan dicari, dan file-file yang tidak akan Anda lihat secara default, seperti binari, cadangan, dan file kontrol versi.

Alister Bulman
sumber
5

The grepprogram itu sendiri dapat mencari secara rekursif dan juga menerima pilihan untuk mencari file tertentu saja. Berikut ini setara dengan dua findperintah Anda.

grep -Ri --include=*.[ch] invalid\ preset .
garyjohn
sumber
Ini bekerja untuk saya ketika saya menyingkirkan tanda kurung
Mike
1

Perintah find dapat memanggil grep sendiri.

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

dan variasi daripadanya.

Keith
sumber
Mengubahnya menjadi variasi yang jelas. ;-)
Keith
0

Saya dapat menambahkan sesuatu seperti ini ke blog Anda ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
AlejandroVD
sumber