Temukan string hanya di file tertentu di dalam subdirektori


10

Katakanlah saya perlu menemukan fungsi GetTypes()di semua file sumber C # ( .cs) direktori / subdirektori.

Saya menggunakan grep -rn GetTypes *.cs, tapi saya punya kesalahan dengan grep: *.cs: No such file or directory. Saya harus menggunakan grep -rn GetTypes *, tetapi dalam hal ini menunjukkan semua file tidak *.cshanya.

Perintah apa yang harus saya gunakan untuk menemukan string hanya dalam .csfile?


Jawaban:


12

Jika shell Anda bash ≥4, menempatkan shopt -s globstardi Anda ~/.bashrc. Jika shell Anda zsh, Anda baik-baik saja. Maka Anda bisa lari

grep -n GetTypes **/*.cs

**/*.cs berarti semua file cocok *.cs di direktori saat ini, atau di subdirektori, secara rekursif.

Jika Anda tidak menjalankan shell yang mendukung **tetapi grep Anda mendukung --include, Anda dapat melakukan grep rekursif dan memberi tahu grepuntuk hanya mempertimbangkan file yang cocok dengan pola tertentu. Perhatikan tanda kutip di sekitar pola nama file: itu ditafsirkan oleh grep, bukan oleh shell.

grep -rn --include='*.cs' GetTypes .

Dengan hanya alat portabel (beberapa sistem tidak memiliki grep -rsama sekali), gunakan finduntuk bagian traversal direktori, dan grepuntuk bagian pencarian teks.

find . -name '*.cs' -exec grep -n GetTypes {} +

Untuk set sementara yang globstarpilihan untuk saat ini Bash 4 + shell, gunakan: shopt -s globstar.
tjanez

8

Anda harus memeriksa pengganti grep / find gril yang dikenal sebagai ack . Ini secara khusus diatur untuk mencari melalui direktori file kode sumber.

Perintah Anda akan terlihat seperti ini:

ack --csharp GetTypes

4

Jika Anda menggunakan GNU grep, Anda dapat menentukan file mana yang akan dimasukkan dalam traversal direktori rekursif:

grep --include '*.cs' -rn GetTypes .

(di mana periode terakhir menunjukkan direktori kerja saat ini sebagai root dari traversal)


4

Saya menggunakan kombinasi find dan grep:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

Sebab find, Anda bisa mengganti .dengan direktori dan menghapus-name jika Anda ingin mencari di setiap file.

Sebab grep, -bnakan mencetak posisi dan nomor garis dan --colorakan membantu mata Anda dengan menyorot apa yang Anda cari.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.