跳轉到內容

Linux 管道命令 高效處理數據流

管道命令操作符是:|,它僅能處理經由前面一個指令傳出的正確輸出信息,也就是 standard output 的信息,對於 stdandard error 信息沒有直接處理能力。然後,傳遞給下一個命令,作為標準的輸入 standard input

TIP

  1. 管道命令只處理前一個命令正確輸出,不處理錯誤輸出
  2. 管道命令右邊命令,必須能夠接收標準輸入流命令才行。

讀出test.sh文件內容,通過管道轉發給grep 作為輸入內容

sh
cat test.sh | grep -n 'echo'

5:    echo "very good!";
7:    echo "good!";
9:    echo "pass!";
11:    echo "no pass!";

cat test1.sh不存在,錯誤輸出打印到屏幕,正確輸出通過管道發送給grep

sh
cat test.sh test1.sh | grep -n 'echo'

cat: test1.sh: 沒有那個文件或目錄
5:    echo "very good!";
7:    echo "good!";
9:    echo "pass!";
11:    echo "no pass!";

將test1.sh 沒有找到錯誤輸出重定向輸出給/dev/null 文件,正確輸出通過管道發送給grep

sh
cat test.sh test1.sh 2>/dev/null | grep -n 'echo'

5:    echo "very good!";
7:    echo "good!";
9:    echo "pass!";
11:    echo "no pass!";

讀取test.sh內容,通過管道發送給ls命令,由於ls 不支持標準輸入,因此數據被丟棄

sh
cat test.sh | ls

catfile      httprequest.txt  secure  test            testfdread.sh  testpipe.sh    testsh.sh      testwhile2.sh
envcron.txt  python           sh      testcase.sh     testfor2.sh    testselect.sh  test.txt       text.txt
env.txt      release          sms     testcronenv.sh  testfor.sh     test.sh        testwhile1.sh

最後更新於: