lsをgrepにパイピング("project"行)

lsをgrepにパイピング("project"行)

次のコマンドを検討してください。

ls
dir1 dir2 file1
x1   x2   y2

この出力がgrepなどにパイプされると、各ファイル/ディレクトリは「アイテム」として扱われます。

ls | grep f
file1

ls明らかに、aによって生成された実際の出力とgrepによって処理された入力の間に違いがあります。

ls | grep fgrepは行で機能するため、最初の行全体が表示されると予想できます。dir1 dir2 file1

私がここで何を見逃しているのでしょうか?この動作のメカニズムは何ですか?

答え1

コマンドは、出力がTTYに送信されるタイミングを検出できます。したがって、この特別な場合、ls出力がTTYに送信されないことを検出すると、それはパラメータとして渡されたかの-1ように動作します。

grep以下を使用して特別なことをしないことがわかりますcat

ls | cat

答え2

リダイレクトされたときに出力がどのように動作するかを確認するには、ls次の手順を実行します。

ls | cat

または

ls -1

これはls、出力がTTYに送信されないときに機能する方法です。

関連情報