Keuntungan dari cat'ing file dan perpipaan untuk grep

19

Apakah ada keuntungan tambahan dari menjalankan file dan mem-pipe-nya untuk menerima, selain kenyamanan? Kemudahannya adalah, ketika saya mengambil perintah seperti yang di bawah ini dari histori saya, kursor berada di akhir baris, jadi mudah untuk memodifikasi perintah dengan teks yang berbeda untuk melawan file yang sama.

Jadi, apa kelebihan lain dari konvensi berikut ini:

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

dari pada:

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

Jawaban:

21

Lebih baik menghindari kucing; tulis dengan cara ini jika pengeditan baris penting:

$ < filename grep pattern

Alasannya adalah mendorong semua data melalui cat menghabiskan memori dan sumber daya CPU. Manfaat lain dari meneruskan nama file sebagai argumen daripada mengarahkan ulang stdin adalah bahwa ia memungkinkan perintah opsi untuk mmap () file.

Phil
sumber
9

Aku tidak percaya tidak ada yang dirujuk "Useless Penggunaan Cat" http://www.smallo.ruhr.de/award.html belum

Ada satu keuntungan yang patut dipertanyakan. Jika Anda memiliki saluran pipa yang panjang, ini akan terlihat sedikit lebih orthogonal dengan kucing:

cat file | command1 | command 2 | command3

Ini mengelompokkan semua perintah bersama.

Tentu saja seperti yang orang lain katakan (dan saya lakukan)

< file command1 | command2 | command3

Melakukan hampir hal yang sama. Yang mengatakan, cat cukup kecil dan tidak akan menurunkan komputer Anda jika Anda menggunakannya saat Anda tidak benar-benar perlu.

Biasanya menggunakan catvs langsung memukul file tidak mengubah apa pun, tetapi itu membuat perbedaan untuk perintah tertentu yang peduli jika ada beberapa file sebagai argumen, seperti grep. Inti masalah:

cat file1 file2 | grep SOMETHING

akan memiliki keluaran yang berbeda dari

grep SOMETHING file1 file2

Yang akan memiliki nama file yang cocok di output. Ada saat-saat saya tidak ingin nama file, dan itu keuntungan menggunakan cat.

Homolka yang kaya
sumber
1
catjauh lebih jelas untuk dibaca daripada <. Atau mungkin hanya untuk kita para fogeys yang berpikir bahwa Unix dan bash dapat belajar banyak dari VMS dan DCL.
RonJohn
8

Tidak ada keuntungan. Kursor Anda yang berada di bagian akhir juga tidak masalah jika Anda menyusunnya seperti ini:< inputfile grep -args foo

Daenyth
sumber
6

Anda tidak perlu menggunakan kucing dalam situasi ini sama sekali. Itu tidak perlu dan buang-buang waktu, karena alat seperti grep mengambil nama file sebagai argumen.

[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]#

Pembaruan: Terima kasih, @Andy Lester, karena telah menunjukkan bahwa pengaturan waktu ini tidak memperhitungkan cache disk. Saya belajar sesuatu yang baru! Tetapi penghematan sepersekian detik tidak membuat banyak perbedaan pula. Saya hanya berpikir piping kucing ke grep bukan cara logis untuk melakukan sesuatu. Ini seperti meminta orang lain untuk membantu Anda dengan masalah, ketika Anda benar-benar mampu menyelesaikannya sendiri.

dogbane
sumber
1
@Michael: A -10 untukmu karena tumpul. Anda bisa lebih membantu. Sayang sekali Anda tidak akan melihat ini karena Anda tidak memiliki akun di sini.
Dijeda sampai pemberitahuan lebih lanjut.
4
Michael mengatakan bahwa timing di atas tidak memperhitungkan cache disk. (dan -0,29 untuk Dennis karena lebih tertarik memukul Michael daripada membatalkan balasan)
Andy Lester
1
Saya kira jika harus ada suara daripada sinyal komentar adalah tempat untuk itu. Terima kasih @Andy karena saya tidak tahu Michael merujuk ke cache disk.
George Jempty
3

Kemudahan mengedit adalah satu-satunya keuntungan nyata, dan jika Anda melakukannya di baris perintah, setiap waktu tambahan yang diperlukan untuk menjalankan catdan melakukan pipa tidak akan benar-benar membuat perbedaan.

Tidak ada alasan untuk melakukannya dalam skrip shell.

Blrfl
sumber
2

Tidak ada manfaat sama sekali. Alih-alih khawatir tentang memodifikasi perintah, belajar untuk menavigasi baris perintah shell Anda dengan lebih baik dengan kunci akselerator dan pintasan.

Andy Lester
sumber
1

Tidak dan bahkan mungkin lebih lambat dalam contoh yang Anda berikan.

A pipedibuat antara cat dan grep, yang tidak diperlukan saat memberikan nama file langsung ke grep. Namun saya tidak berpikir dalam keadaan apa pun apakah Anda akan mengamati batasan throughput karena ini.

Keuntungan lain dari input perpipaan untuk grep termasuk pemrosesan tambahan sebelumnya, seperti penggunaan utilitas dengan kemampuan membaca file yang lebih maju. (Lihat tee,, zcatantara lain).

Matt Joiner
sumber