Cat'ing dosyası ve borularının grep'e avantajları


19

Kolaylığın yanı sıra, bir dosyayı dosyalamanın ve grep'e borulamanın ek avantajları var mı? Kolaylık, geçmişimden aşağıdaki gibi komutları aldığımda, imlecin satırın sonunda olması, bu yüzden aynı dosyaya karşı grep için farklı metin ile komutu değiştirmek kolaydır.

Peki, aşağıdaki sözleşmede başka hangi avantajlar olabilir:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main

onun yerine:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 

Yanıtlar:


21

Kedi önlemek için daha iyi; satır düzenleme önemliyse bu şekilde yazın:

$ < filename grep pattern

Bunun nedeni, tüm verileri cat yoluyla iletmenin bellek ve CPU kaynaklarına mal olmasıdır. Dosya adını yönlendirme stdin yerine argüman olarak geçirmenin bir diğer yararı da komutun dosyayı mmap () seçeneğine izin vermesidir.


9

Hiç kimse "Cat Yararsız Kullanımı" başvurulan inanamıyorum http://www.smallo.ruhr.de/award.html henüz

Şüpheli bir avantajı var. Uzun bir boru hattınız varsa, kedi ile biraz daha dik görünüyor:

cat file | command1 | command 2 | command3

Tüm komutları bir araya getirir.

Tabii ki diğerleri söylediler (ve ben yaparım)

< file command1 | command2 | command3

Hemen hemen aynı şeyi yapar. Bununla birlikte, kedi oldukça küçüktür ve gerçekten ihtiyacınız olmadığında kullanırsanız bilgisayarınızı düşürmez.

Normalde catvs'nin doğrudan bir dosyaya çarpması bir şeyi değiştirmez, ancak argüman olarak birden fazla dosya olup olmadığını önemseyen belirli komutlar için bir fark yaratır grep. Konuşma konusu olan mesele:

cat file1 file2 | grep SOMETHING

daha farklı çıktıya sahip olacak

grep SOMETHING file1 file2

Hangi çıktıda eşleşen dosya adlarına sahip olacak. Dosya adlarını istemediğim zamanlar var ve bunu kullanmak bir avantaj cat.


1
catokumaktan çok daha açıktır <. Ya da sadece bizim için Unix ve bash'ın VMS ve DCL'den çok şey öğrenebileceğini düşünen sisler.
RonJohn

8

Hiçbir avantajı yok. Bunun yerine imlecinizin sonunda olması da önemli değil:< inputfile grep -args foo


6

Sadece bu durumda kedi kullanmanıza gerek yoktur. Gereksiz ve zaman kaybıdır, çünkü grep gibi araçlar dosya adlarını argüman olarak alır.

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#

Güncelleme: Teşekkürler @Andy Lester, bu zamanlamaların disk önbelleğini dikkate almadığına işaret ettiği için. Yeni bir şey öğrendim! Ancak saniyenin bir kısmının tasarruf edilmesi zaten bir fark yaratmıyor. Bence kediyi grep'e sokmak mantıklı şeyler yapmanın mantıklı bir yolu değil. Bu, başka birinden, kendiniz mükemmel bir şekilde çözebildiğinizde size bir sorunla ilgili yardım etmesini istemek gibidir.


1
@Michael: Geniş olduğun için sana -10. Daha yararlı olabilirdin. Burada hesabınız olmadığı için bunu göremeyeceksiniz çok kötü.
sonraki duyuruya kadar duraklatıldı.

4
Michael yukarıdaki zamanlamaların disk önbelleğini dikkate almadığını söylüyor. (ve a -0.29'dan, Michael'ı aşağılamayı engellemek yerine Michael'ı vurmakla daha fazla ilgilendiği için)
Andy Lester

1
Sanırım gürültü yerine yorum olmalı bunun için bir yer olduğunu varsayalım. Michael @ disk önbelleğine atıfta olduğunu bilmiyordum @Andy teşekkürler.
Dexygen

3

Düzenleme kolaylığı tek gerçek avantajdır ve komut satırında catyapıyorsanız, boruyu çalıştırmak ve yapmak için gereken ek süre gerçekten bir fark yaratmaz.

Bununla birlikte, bir kabuk komut dosyasında bunu yapmak için hiçbir neden yoktur.


2

Hiç faydası yok. Komutları değiştirmekten endişe etmek yerine, hızlandırıcı tuşlar ve kısayollarla kabuk komut satırında daha iyi gezinmeyi öğrenin.


1

Hayır ve verdiğiniz örnekte çok daha yavaş olabilir.

pipeDosya adı doğrudan grep'e aktarılırken gerekli olmayan kedi ve grep arasında A oluşturulur. Ancak, bu nedenle hiçbir şekilde üretim sınırlamalarını gözlemleyeceğinizi düşünmüyorum.

Boru girişinin grep'e sağladığı diğer avantajlar arasında, daha gelişmiş dosya okuma özelliklerine sahip yardımcı programların kullanılması gibi ek işlemler yer alır. (Bakınız tee, zcatdiğerleri arasında).

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.