Pertanyaan Bagaimana saya grep secara rekursif?


Bagaimana saya secara rekursif grep semua direktori dan subdirektori?

find . | xargs grep "texthere" *

1347
2018-01-01 05:10


asal


Jawaban:


grep -r "texthere" .

Parameter pertama mewakili ekspresi reguler untuk mencari, sedangkan yang kedua mewakili direktori yang harus dicari. Pada kasus ini, . berarti direktori saat ini.

Catatan: Ini berfungsi untuk GNU grep, dan pada beberapa platform seperti Solaris Anda harus secara khusus menggunakan GNU grep sebagai lawan dari implementasi warisan. Untuk Solaris ini adalah ggrep perintah.


2030
2018-01-01 05:11



Jika Anda mengetahui ekstensi atau pola dari file yang Anda inginkan, metode lain yang akan digunakan --include pilihan:

grep -r --include "*.txt" texthere .

Anda juga dapat menyebutkan file untuk dikecualikan --exclude.

Ag

Jika Anda sering mencari melalui kode, Ag (The Silver Searcher) adalah alternatif yang jauh lebih cepat untuk grep, yang dikustomisasi untuk mencari kode. Misalnya, ini rekursif secara default dan secara otomatis mengabaikan file dan direktori yang tercantum di dalamnya .gitignore, jadi Anda tidak harus terus melewatkan opsi tidak menentu yang sama untuk grep atau temukan.


568
2017-12-30 22:59



Juga:

find ./ -type f -print0 | xargs -0 grep "foo"

tapi grep -r adalah jawaban yang lebih baik.


106
2018-01-01 05:14



Saya sekarang selalu menggunakan (bahkan di Windows dengan GoW - Gnu di Windows):

grep --include="*.xxx" -nRHI "my Text to grep" *

Itu termasuk opsi berikut:

--include=PATTERN

Rekor di direktori hanya mencari file yang cocok PATTERN.

-n, --line-number

Awali setiap baris output dengan nomor baris dalam file inputnya.

-R, -r, --recursive

Baca semua file di bawah setiap direktori, secara rekursif; ini setara dengan -d recurse pilihan.

-H, --with-filename

Cetak nama file untuk setiap pertandingan.

-I     

Proses file biner seolah-olah tidak berisi data yang cocok;
  ini setara dengan --binary-files=without-match pilihan.

Dan saya dapat menambahkan 'i'(-nRHIi), jika saya ingin hasil yang tidak sensitif huruf.

Saya bisa mendapatkan:

/home/vonc/gitpoc/passenger/gitlist/github #grep --include="*.php" -nRHI "hidden" *
src/GitList/Application.php:43:            'git.hidden'      => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
src/GitList/Provider/GitServiceProvider.php:21:            $options['hidden'] = $app['git.hidden'];
tests/InterfaceTest.php:32:        $options['hidden'] = array(self::$tmpdir . '/hiddenrepo');
vendor/klaussilveira/gitter/lib/Gitter/Client.php:20:    protected $hidden;
vendor/klaussilveira/gitter/lib/Gitter/Client.php:170:     * Get hidden repository list
vendor/klaussilveira/gitter/lib/Gitter/Client.php:176:        return $this->hidden;
...

83
2018-02-14 09:33



Atau instal ack, jika Anda ingin cara yang jauh lebih cepat dan melakukan ini banyak.


53
2018-01-01 05:47



Dalam sistem POSIX, Anda tidak menemukan -r parameter untuk grep dan Anda grep -rn "stuff" . tidak akan berjalan, tetapi jika Anda menggunakan find perintahnya akan:

find . -type f -exec grep -n "stuff" {} \; -print

Disetujui oleh Solaris dan HP-UX.


19
2017-08-08 14:56



Untuk menemukan nama files dengan path secara rekursif mengandung yang khusus string gunakan perintah di bawah ini untuk UNIX:

find . | xargs grep "searched-string"

untuk Linux:

grep -r "searched-string" .

cari file di UNIX server

find . -type f -name file_name

cari file di server LINUX

find . -name file_name

10
2018-01-29 14:31