Mengapa "kata kunci grep" menyebabkan terminal untuk selamanya?


25

Ketika saya mengetik "grep doc" di terminal, itu hanya tidak melakukan apa-apa, menghentikan terminal dari melakukan hal lain sebelum saya melarikan diri menggunakan Ctrl+ Catau Z.

Saya tahu ini bukan bagaimana saya seharusnya menggunakan grep, tetapi hanya ingin tahu mengapa ini terjadi.

Jawaban:


40

grep secara default mencari input standar jika tidak ada file yang diberikan:

grep mencari nama input FILE (atau input standar jika tidak ada file yang dinamai, atau jika tanda hubung minus tunggal (-) diberikan sebagai nama file) untuk baris yang berisi kecocokan dengan POLA yang diberikan. Secara default, grep mencetak garis yang cocok.

Jika Anda hanya grep docgrep mengharapkan input standar untuk datang dan mencari di dalamnya (jangan masukkan bagian antara <dan >ke terminal, ini adalah komentar):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>

6
OP juga dapat menekan Ctrl + D pada sebuah baris dengan sendirinya untuk mengakhiri "sesi."
Kevin

2
Jawaban yang bagus. Hanya ingin catatan yang cukup banyak tidak ada yang pernah perlu menggunakan grep dengan mengetik seperti itu, tetapi memungkinkan Anda untuk pipa output standar dari perintah sebelumnya, yang merupakan sangat berguna.
Karl Bielefeldt

20
@KarlBielefeldt: Ini sebenarnya cara yang nyaman untuk men-debug regexps yang rumit. Anda dapat menjalankan sesuatu seperti grep '([a-z]+[0-9]*.x){2,3}'dan mengetikkan banyak garis sampel pada keyboard Anda untuk memastikannya cocok dengan apa yang Anda pikirkan. Baris yang cocok akan digaungkan, garis yang tidak akan tidak bisa.
Nate Eldredge

1
@NateEldredge: Terima kasih telah memberikan contoh praktis untuk ini! Saya selalu melihat permintaan null-arg tentang hal-hal seperti grep dan cat sebagai teori.
labirin

1
@ labrinth Mereka tidak teoritis sama sekali, mereka digunakan sepanjang waktu ketika pemipaan, misalnyasomecommand | grep foo
Barmar

14

grep sedang menunggu input.

Dari man grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
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.