Di mana grep -r mencari secara default?

16

Saya menemukan jika saya mencari menggunakan grep tanpa menentukan jalur, seperti grep -r 'mytext'itu butuh waktu lama. Sementara itu jika saya mencari dengan jalur yang ditentukan grep -r 'mytext' .itu langsung menemukan apa yang saya butuhkan. Jadi, saya ingin tahu, dalam bentuk pertama, di direktori mana grep mencari?

UDATE: versi grep: grep (GNU grep) 2.10


sumber
3
Coba ketikkan, tulis foomytextbar(diikuti dengan Enter) setelah berjalan grep -r 'mytext'.
sr_
2
Mungkin Anda harus menentukan raja apa grepitu. Dengan GNU grepsaya gunakan di Linux grep -r 'mytext'dan grep -r 'mytext' .melakukan hal yang sama: pencarian secara rekursif dimulai dari direktori saat ini. Ketika -rsaklar digunakan, GNU grep tidak mencari STDIN.
manatwork
2
Ah. Saya menguji dengan grep2.12: pastebin.com/L4my26QS Sementara itu saya menemukan ini di file NEWS mengenai versi 2.11 (2012-03-02): "Jika tidak ada operan file yang diberikan, dan opsi baris perintah -r atau opsi setara diberikan , grep sekarang mencari direktori yang berfungsi. Sebelumnya grep mengabaikan -r dan mencari input standar secara tidak rekursif. -r yang ditemukan di GREP_OPTIONS tidak memiliki efek baru ini. "
manatwork
3
GNU grep baru-baru ini mengubah perilaku dengan argumen -r (lihat komit ). Jadi "grep -r POLA" dengan grep yang lebih baru akan mencari direktori saat ini dan bukan STDIN.
hluk
2
@Mikel, saya memperbarui pertanyaan saya dengan versi grep. Tampaknya jawaban yang saya tunjuk benar memang benar, karena saya menggunakan grep 'lama'. Jadi tidak masalah saya menentukan -r atau tidak, jika tidak ada direktori yang disediakan, ia mencari di STDIN. Btw, terima kasih untuk penyelidikan itu, sekarang, saya akan mengetahui perubahan grep di masa depan;)

Jawaban:

24

Sebenarnya itu tidak mencari di mana pun. Ia menunggu input dari input standar.

Coba ini:

beast:~ viroos$ grep foo

ketika Anda mengetik baris yang berisi "foo" dan tekan enter baris ini akan diulang jika tidak kursor akan dipindahkan ke baris baru tetapi grep tidak akan mencetak apa pun.

Maciek Sawicki
sumber
6
Seperti yang saya komentari di atas grep -r PATTERNdengan versi GNU grep yang lebih baru tidak akan membaca input standar tetapi mencari pola di direktori saat ini (lihat komit ). Perubahan ini masuk akal karena Anda mungkin tidak ingin mencari input standar ketika Anda menentukan -rflag.
hluk
Saya memeriksa versi grep saya, versi 2.10, jadi jawaban ini sangat relevan. Btw, sekarang, saya akan tahu harus menunggu apa dari versi grep yang lebih baru.
3

Persis seperti jawaban sebelumnya oleh Maciek mengatakan:

Sebenarnya itu tidak mencari di mana pun. Ia menunggu input dari input standar.

Namun Anda dapat menulis ke stdin dari program yang sudah berjalan jika Anda memiliki / proc tersedia dengan mem-pipkan data ke deskriptor pertama ke-0:

Dalam satu terminal

grep "hello"

dan melihatnya menunggu tanpa batas ... Di terminal lain ketik ini:

echo "hello $USER" > /proc/`pgrep grep`/fd/0

lihat terminal cetak halo pertama dan nama pengguna Anda.

Philluminati
sumber