キャッチファイルとgrepへの配管の利点


17

便利さ以外にも、ファイルをcatingしてgrepにパイプすることの利点はありますか?私の履歴から以下のようなコマンドを検索すると、カーソルは行末にあるので、同じファイルに対してgrepするために異なるテキストでコマンドを変更するのは簡単です。

それで、他のどんな利点が以下のコンベンションにあるかもしれません:

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

の代わりに:

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

回答:


20

猫を避けた方がいい。行の編集が重要な場合は、このように書いてください。

$ < filename grep pattern

その理由は、catを介してすべてのデータをプッシュすると、メモリとCPUリソースが消費されるためです。標準入力をリダイレクトするのではなく、引数としてファイル名を渡すことのもう1つの利点は、コマンドがファイルをmmap()するオプションを許可することです。


8

利点はありません。カーソルが最後にある場合も、代わりに次のように構成してもあまり問題になりません。 < inputfile grep -args foo


7

私はだれも「猫の無用な使用」と言及したことがあるとは思えない。 http://www.smallo.ruhr.de/award.html まだ

1つ疑わしい利点があります。あなたが長いパイプラインを持っているなら、それはcatともう少し直交的に見えます:

cat file | command1 | command 2 | command3

すべてのコマンドをまとめてクラスタ化します。

もちろん、他の人が言っているように(そして私もそうです)

< file command1 | command2 | command3

ほぼ同じことを実行します。そうは言っても、catは非常に小さく、あなたが本当に必要としないときにそれを使用すればあなたのコンピュータをダウンさせることはありません。

通常使う cat ファイルに直接アクセスしても何も変わりませんが、引数として複数のファイルがあるかどうかを気にする特定のコマンドでは違いがあります。 grep。適例:

cat file1 file2 | grep SOMETHING

とは異なる出力になります

grep SOMETHING file1 file2

一致するファイル名が出力に表示されます。私はファイル名が欲しくない時があります、そしてそれはそれを使うことの利点です cat


1
cat 読むよりずっと読みやすい <。あるいは、UnixとbashがVMSとDCLから多くのことを学ぶことができると思っている私たちの悪ふざけ者のためかもしれません。
RonJohn

5

あなたは単にこの状況でcatを使う必要はまったくありません。 grepなどのツールはファイル名を引数として取るので、これは不要で時間の無駄です。

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

更新:これらのタイミングではディスクキャッシュが考慮されていないことを指摘してくれてありがとう、@ Andy Lester。私は何か新しいことを学びました!しかし、ほんの一瞬の節約でも、それほど大きな違いはありません。私はただgrepに猫をパイピングすることは物事を行うための論理的な方法ではないと思います。自分で問題を解決できる場合は、他の人に問題の解決を依頼するのと同じです。


@マイケル:鈍いので-10 A。もっと役に立ちましたか。あなたがここにアカウントを持っていないので残念です。
Dennis Williamson

4
Michaelは、上記のタイミングはディスクキャッシュを考慮していないと言っています。 (そして、返事を邪魔しないよりも、マイケルを軽蔑することに興味を持っていたDennisの-0.29)
Andy Lester

1
コメントを伝えるよりもノイズがあるに違いないのであれば、私は思うでしょう。 Michaelがディスクキャッシュを参照していることを知らなかったので、@ Andyに感謝します。
George Jempty

3

編集のしやすさが唯一の本当の利点です、そしてあなたがコマンドラインでそれをしているならば、それが実行するのにかかる追加時間。 cat そしてパイプが本当に違いを生むことはありませんか。

ただし、シェルスクリプトでそれを行う理由はありません。


2

まったく利益はありません。コマンドの変更を心配する代わりに、アクセラレータキーとショートカットを使ってシェルのコマンドラインを操作しやすくしてください。


1

いいえ、それはあなたが与える例では少し遅いかもしれません。

A pipe catとgrepの間に作成されます。これは、ファイル名を直接grepに渡すときには必要ありません。ただし、これが原因でスループットの制限が守られることは決してありません。

grepへの入力のパイピングのその他の利点には、より高度なファイル読み取り機能を持つユーティリティの使用など、追加の事前処理が含まれます。 (見る teezcat、とりわけ)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.