Grep

管道 ls 到 grep(行與“項目”)

  • July 11, 2016

考慮以下命令:

ls
dir1 dir2 file1
x1   x2   y2

當此輸出通過管道傳輸到例如 grep 中時,每個文件/目錄都作為“項目”處理。

ls | grep f
file1

ls所以很明顯 a產生的實際輸出和 grep 處理的輸入是有區別的。

由於 grep 在行上執行,因此可以預期ls | grep f會顯示整個第一行,即:dir1 dir2 file1

我在這裡想念什麼?這種行為背後的機制是什麼?

命令可以檢測其輸出何時會發送到 TTY 或不發送到 TTY。因此,在這種特殊情況下,當ls檢測到其輸出不會發送到 TTY 時,它的行為就像-1是作為參數傳遞一樣。

您可以看到這一點,並且使用以下grep命令並沒有做任何特別的事情cat

ls | cat

要查看ls重定向其輸出時的行為,您可以嘗試執行

ls | cat

或者

ls -1

這是ls當它的輸出不去 TTY 時的行為方式。

引用自:https://unix.stackexchange.com/questions/295136