了解 Linux 中的 grep 和管道

了解 Linux 中的 grep 和管道

我碰到帖子解釋了我的問題。假設有一個名為file.txt「foo World」的檔案。
泰勒發布的答案解釋了很多,但我很困惑如何

cat file.txt | grep "foo"

類似

grep "foo" file.txt

我認為grep需要以下內容

grep input argument  // input is the string to search for (i.e) foo and
                     //  argument is the file path (./file.txt)

cat file.txt現在,文件內容的輸出成為?foo World的輸入。grep我對麼?如果是這樣,我認為grep需要一個檔案路徑作為字串?

答案1

大多數命令可以處理輸入,這些輸入要么是需要打開輸入的文件,要么是透過 STDIN 傳遞給命令的資料流。

當 的內容cat file.txt透過管道 ( ) 發送到另一個命令時|,透過傳遞到左側管道的 STDOUT 的輸出將被設定並饋送到管道 STDIN 右側的命令。

如果內容不是透過管道透過 STDOUT -> STDIN 傳遞,則命令可以透過開啟透過命令列參數按名稱傳遞的檔案來接收資料。

例子

將輸出傳送到 STDOUT。

$ cat file 
1
2
3
4
5

from 的輸出透過管道cat file透過 STDOUT 發送到的 STDIN。grep

$ cat file | grep 5
5

作為命令列參數處理文件。

$ grep 5 file 
5

直接透過 STDIN 處理文件內容。

$ grep 5 < <(cat file)
5

在這裡,我演示了可以透過上面的 STDINfile定向到的內容。grep

相關內容