1. 程式人生 > >Linux學習——資料流重定向與管道

Linux學習——資料流重定向與管道

一、資料流重定向

命令的執行過程
上圖包含3種資料流:
1、標準輸入流(stdin):程式碼為0,符號為<或<<;
2、標準輸出流(stdout):程式碼為1,符號為>或>>;
3、標準錯誤流(stderr):程式碼為2,符號為2>或2>>。
將資料從指定的流輸入或輸出,就稱為資料重定向。
幾點解釋:
1、>或2>:以覆蓋的方式輸出
2、>>或2>>:以追加的方式輸出
3、<:標準輸入流預設從鍵盤輸入,<<:用於設定結束輸入的關鍵字
例如:cat > test.sh << eof 則只有當輸入eof並回車之後才會執行完cat 命令。

二、管道命令

這裡寫圖片描述
1、管道命令的界定符號為”|”;
2、管道命令僅會處理stdout,對stderr會忽略;
3、管道命令必須要能夠接收來自前一個命令的資料作為stdin。

選取命令

1、cut:將同一行資料進行分解,從一行中取出部分資訊。
這裡寫圖片描述
對cut -d’分隔符’ -f field 的解釋:
首先從每一行找到‘分隔符’的位置,然後根據f 後的數字x找到對應的第x個分隔符,然後取出第x-1個分隔符與第x個分隔符之間的字元。若x=分隔符數+1,則輸出最後一個分隔符之後的所有字元,若x更大,則輸出為空。
-c後面所接的為‘x-y’格式,如‘5-8’表示選取第‘5-8’個字元
2、grep:按照條件取出某行
這裡寫圖片描述


直接grep ‘字串’:選取帶有相應‘字串’的行顯示;
-n在正常輸出結果的前提下在每行最前面加入相應行的行號;

排序命令

1、sort:對輸入內容進行排序。
這裡寫圖片描述
2、wc:統計字、字元、行。
這裡寫圖片描述
直接使用wc命令將輸入行數,字數和字元數,其中字數是以空格為區分的,若無空格,則再長的字串都是做一個字。
3、uniq:取出結果中的重複行。
這裡寫圖片描述

注:管道命令一般都會與選取與排序命令結合或者資料流重定向結合使用,管道命令以‘|’為界定符,命令依次從左向右執行,‘|’之前的執行結果將作為‘|’之後的命令的輸入。

雙向重定向

雙向重定向命令(tee)能將資料流同時輸出到檔案與螢幕:
這裡寫圖片描述


示例:last | tee test.list|cut -d’ ’ -f1
若加了 -a 則內容會加在檔案之後,若無,則會重寫該檔案。