Grep -r varsayılan olarak nerede arama yapar?


16

grep -r 'mytext'Sonsuz uzun sürdüğü gibi bir yol belirtmeden grep kullanarak arama yaparsam buldum . Bu arada belirtilen yolla arama grep -r 'mytext' .yaparsam ihtiyacım olan şeyi anında bulur. Merak ediyorum, ilk haliyle, grep hangi dizinde arama yapıyor?

UDATE: grep sürümü: grep (GNU grep) 2.10


3
Yazmayı deneyin, foomytextbarçalıştırdıktan sonra yazın (ardından Enter tuşuna basın) grep -r 'mytext'.
sr_

2
Belki de grepbunun kralı olduğunu belirtmelisin. GNU grepile Linux'ta kullanıyorum grep -r 'mytext've grep -r 'mytext' .aynı şeyi yapıyorum : geçerli dizinden başlayarak özyinelemeli arama. Ne zaman -ranahtar GNU kullanılır grep değil STDIN arar.
manatwork

2
Ah. grep2.12 ile test ettim : pastebin.com/L4my26QS Bu arada NEWS dosyasında sürüm 2.11 (2012-03-02) ile ilgili olarak buldum: "Hiçbir dosya işleneni verilmemişse ve bir komut satırı -r veya eşdeğeri seçeneği verilirse , grep şimdi çalışma dizininde arama yapıyor. Eskiden grep, -r'yi yoksaydı ve standart girdiyi yinelemesiz olarak aradı. GREP_OPTIONS içinde bulunan bir -r bu yeni etkiye sahip değil. "
manatwork

3
GNU grep, son zamanlarda davranışı -r argümanı ile değiştirdi (bkz . Taahhüt ). Bu nedenle, daha yeni grep ile "grep -r PATTERN" geçerli dizini arar, STDIN'i değil.
hluk

2
@Mikel, sorumu bir grep sürümü ile güncelledim. Görünüşe göre doğru olarak işaret ettiğim cevap gerçekten doğru, çünkü 'eski' bir grep kullanıyorum. Bu yüzden -r'yi belirtmem önemli değil, eğer dizin sağlanmamışsa STDIN'de arama yapıyor. Btw, bu soruşturma için teşekkürler, şimdi,

Yanıtlar:


24

Aslında hiçbir yerde arama yapmıyor. Standart girişten girdi bekler.

Bunu dene:

beast:~ viroos$ grep foo

"foo" içeren bir satır yazıp enter tuşuna bastığınızda bu satır tekrarlanır, aksi takdirde imleç yeni satıra taşınır, ancak grep hiçbir şey basmaz.


6
Yukarıda grep -r PATTERNdaha yeni GNU sürümü ile yorumladığım gibi grep standart girişi okumaz, ancak geçerli dizinde desen arar (bkz . Taahhüt ). Bu değişiklik mantıklıdır, çünkü -rbayrağı belirttiğinizde muhtemelen standart girdiyi aramak istemezsiniz .
hluk

Grep versiyonumu kontrol ettim, 2.10, bu yüzden bu cevap mükemmel bir şekilde alakalı. Btw, şimdi, grep'in yeni sürümlerinden ne bekleyeceğimi bileceğim.

3

Maciek'in bir önceki cevabının söylediği gibi:

Aslında hiçbir yerde arama yapmıyor. Standart girişten girdi bekler.

Ancak, verileri ilk birinci tanımlayıcısına piping yaparak / proc'nuz varsa, zaten çalışan bir programın stdinine yazabilirsiniz:

Bir terminal çalışmasında

grep "hello"

ve süresiz olarak beklediğine bakın ... Başka bir terminalde şunu yazın:

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

ilk terminal baskı merhaba ve kullanıcı adınızı görün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.