web-dev-qa-db-ja.com

grepコマンドとsortコマンドを使用して並べ替える方法を教えてください。

ファイル_/etc/services_にあるすべてのTCPサービスのソートされたリストを作成し、コマンド_grep tcp /etc/services_の出力をコマンドsortにパイプして、リダイレクトします。このパイプのファイル_~/pipelab.txt_への出力。

出力が間違っているというエラーメッセージが表示され続けますが、その理由はわかりません。

これは私が最後に試したことです:

_grep tcp /etc/services > ~/pipelab.txt | sort
_
16
user72510

> ~/pipelab.txtは明らかにパイプライン演算子の同じ側のコマンドに属します|。つまりgrep出力をsortにパイプする代わりに、ファイルにリダイレクトします。

grep tcp /etc/services | sort > ~/pipelab.txt
11
Hauke Laging

grepの出力をファイルにリダイレクトしようとしているandパイプを使用してsortにパイプしている。あなたはそれをすることはできません、少なくともそれは好きではありません。

その代わり、あなたは本当にそれをソートするためにフィードしたいだけです:

grep tcp /etc/services | sort

sorted出力(つまり、何がソートされていないか)をファイルにリダイレクトしたいので、リダイレクトをソートの後に置きます。

grep tcp /etc/services | sort > ~/pipelab.txt

パイプとリダイレクトはどちらも、コマンドの出力先を変更することで機能します。そのうちの2つがgrepからの出力をめぐって争っていました(最終的にはリダイレクトが勝ち、ソートされていない出力をファイルに書き込みました)。

23
derobert