grep ve kuyruk -f?


28

tail -fBir dosyada (veya benzerini) grepaynı anda yapmak mümkün müdür ? Diğer tür komutları sadece bu tür davranışları aramaya aldırmazdım.

Yanıtlar:


46

GNU tailve GNU kullanarak, düz ileri sözdizimini kullanarak grepbir öğütme yapabilirim tail -f:

tail -f /var/log/file.log | grep search_term

Bu, sadece GNU uygulamasının değil, bu iki kuruluşun diğer uygulamalarıyla çalışan bir çözümdür.
Kusalananda

7

İyi çalışacak; daha genel olarak, grepbir programın çıktısı alınmadığında bekleyecek ve çıktının girişini okumaya devam edecektir, yani:

$ (echo foo; sleep 5; echo test; sleep 5) | grep test

5 saniye boyunca hiçbir şey olmayacak, sonra grep eşleştirilen "test" i verecek ve daha sonra beş saniye sonra borulama işlemi bittiğinde çıkacaktır


7

Ekle --line-bufferediçin grep, ve bu sizin için gecikmeyi azaltabilir. Bazı durumlarda çok yararlıdır.

tail -f foo | grep --line-buffered bar

2
Çıkışı grepbir terminale gitmediğinde (başka bir dosya türüne yönlendirilir) faydalıdır . Çıktı bir terminale gittiğinde satır tamponlama varsayılandır, dolayısıyla orada herhangi bir fark yaratmaz. Bu seçeneğin GNU’ya özgü olduğunu unutmayın.
Stéphane Chazelas


2

Bütün bu insanların kullanmaya başladığını söylüyor. tail -f başladığını görüyorum, ancak bunun sınırlamalarını sevmiyorum! Yeni satırları izlerken bir dosyayı aramada en sevdiğim yöntem (örneğin, genellikle cron işleri aracılığıyla düzenli aralıklarla yürütülen işlemlerin yönlendirilmiş çıkışını ekleyen günlük dosyalarıyla çalışırım):

 tail -Fn+0 /path/to/file|grep searchterm

Bu GNU kuyruğu ve grep varsayar. Kuyruk kılavuz sayfasındaki ayrıntıları destekleme (GNU coreutils, mine v8.22'dir) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :

 -F     same as --follow=name --retry
 -n, --lines=K
         output the last K lines, instead of the last 10; or use -n +K to output
         starting with the Kth.
         If  the first character of K (the number of bytes or lines)
         is a '+', print beginning with the Kth item from the start
         of each file, otherwise, print the last K items in the file.
         K may have a multiplier suffix: b 512, kB 1000, K 1024, MB
         1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024,
         and so on for T, P, E, Z, Y.

  With --follow (-f), tail defaults to following the file descriptor,
  which means that even if a tail'ed file is renamed, tail will
  continue to track its end.  This default behavior is  not  desirable
  when  you  really  want  to  track the actual name of the file, not
  the file descriptor (e.g., log rotation).  Use --follow=name in
  that case.  That causes tail to track the named file in a way that
  accommodates renaming, removal and creation.

Bu nedenle, komutumun kuyruk kısmı tail --follow --retry --lines=+0, son argümanın başlangıçta başlamasını, sıfır satırı atlamasını yönlendirdiği yere eşittir .


1
tail -f access | awk '/ADD/{print $0}'

Yukarıdakileri kullanın, genelde kullanırım.


0

Netcat'ı kuyruk sonuçlarını frezlemek için kullanabilirsiniz - yeni sonuçlar oldukça kolaydır.

sudo nc -s localhost -l -p 1337 | grep ssh


tail -f /var/log/file.log | nc 127.0.0.1 1337

Bu, grep'i, 1337 numaralı bağlantı noktasından gelen girişin sonuçlarını dinlemeye ayarlar
. İkinci komut, -f kuyruğunun çıkışını netcat'e gönderir ve bunu, yerel ana bilgisayar 1337'ye gönderir. veya ekran gibi bir şey kullanın.


0

İşe yarıyor. Ancak çıktının artık anlık olmamasına dikkat edin: borudan tamponlanır.


Kabul. Bunu test etmek için iki pencere açın. Run tail -ftek bir pencerede ve tail -f logfile | grep patterndiğer pencerede. patternHer iki pencerede de satırlar aynı anda görünmez. Nadir durumlarda 30 saniye aralıklarla ortaya çıkan çizgiler gördüm, bu can sıkıcıydı.
Stefan Lasiewski,

Bunun, bir kuyruk kuyruğundan birini ya da diğer örneğini çalıştırmak arasında kaymasıyla daha ilgisi olabilir. Daha iyi bir test bize teeya da bir şey olur.
Kevin Cantu
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.