web-dev-qa-db-ja.com

cat'ing fileとgrepへのpipeの利点

便利さ以外に、ファイルを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
Dexygen

猫を避けた方がいい;行編集が重要な場合は、次のように記述します。

$ < filename grep pattern

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

22
Phil

だれも「猫の無用な使用」に言及した人がいないとは信じられません http://www.smallo.ruhr.de/award.html

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

cat file | command1 | command 2 | command3

すべてのコマンドを一緒にクラスター化します。

もちろん他の人が言ったように(そして私はそうします)

< file command1 | command2 | command3

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

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

cat file1 file2 | grep SOMETHING

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

grep SOMETHING file1 file2

一致するファイル名が出力されます。ファイル名が不要な場合がありますが、これはcatを使用する利点です。

10
Rich Homolka

メリットはありません。代わりに次のように構造化しても、カーソルが最後にあることはあまり問題になりません:< inputfile grep -args foo

8
Daenyth

この状況では、猫を使用する必要はまったくありません。 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にパイプすることは、論理的な方法ではないと思います。自分で問題を完全に解決できるときに、誰かに問題を解決するよう依頼するようなものです。

6
dogbane

編集のしやすさが唯一の真の利点であり、コマンドラインで編集している場合、catを実行してパイプを実行するのにかかる追加の時間は、実際には違いがありません。

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

3
Blrfl

メリットはまったくありません。コマンドの変更について心配する代わりに、アクセラレータキーとショートカットを使用してシェルコマンドラインをより適切にナビゲートする方法を学びます。

2
Andy Lester

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

pipe はcatとgrepの間に作成されます。これは、ファイル名を直接grepに渡す場合は必要ありません。ただし、これが原因でスループットの制限が発生する状況はないと思います。

入力をgrepにパイプする他の利点には、より高度なファイル読み取り機能を備えたユーティリティの使用など、事前の追加処理が含まれます。 (特にteezcatを参照)。

1
Matt Joiner