1. 程式人生 > >重定向與管道

重定向與管道

概念 join 分隔 附加 操作 awk err 數據管道 inf

1.Bash 實際上使用三種標準輸入輸出流:

? 標準輸出流(stdout),顯示來自命令的輸出,文件描述符是 1。
? 標準錯誤輸出流(stderr),顯示來自命令的錯誤輸出,文件描述符
是 2。
? 標準輸入流(stdin),向命令提供輸入,文件描述符是 0

技術分享圖片

先有一個輸入:輸入可以從鍵盤或者其他輸入設備,通過 stdin 交給命
令。命令執行完成:成功了,會把成功結果通過 stdout 輸出到輸出設備上:;
如果命令執行有錯誤:會把錯誤結果通過 stderr 也輸出到屏幕上面。一般情況
下,我們可以將 stdout 和 stderr 視為終端屏幕或者終端窗口,而將 stdin 視為
終端鍵盤。

2.重定向

輸出重定向指的就是:
將某個程序默認指向 stdout 或者 stderr 的輸出文本流轉而指向另一個文件,也
即程序輸出到某個指定文件中而不是輸出到終端屏幕或者終端窗口中了

對輸出進行重定向有兩種方法:

n> ,表示將來自文件描述符 n 的輸出重定向到文件。必須對這個文件有寫權限。如果文件不存在,就創建它。如果它存在,將覆蓋原有文件內容;
n>>,也表示將來自文件描述符 n 的輸出重定向到文件。同樣,必須對這個文件有寫權限。如果文件不存在,就創建它。如果它存在,輸出就附加到現有文件後

&> 或 &>> 將標準輸出和標準錯誤重定向到同一個位置,對文件描述符 n 進行重定向,然後使用 m>&n 或 m>>&n 將文件描述符 m 重定向到同一個位置

完全忽略標準輸出或標準錯誤。為此,可以把適當的流重定向到 /dev/null 中, /dev/null ,可以說成是黑洞裝置。為空,即不保存。

輸出重定向則指的是:

讓某個程序從指定文件中獲取輸入而非從 stdin 中(常常指鍵盤)獲取輸入了

使用 < 操作符將 stdin 重定向為來自文件

tr ‘準備要替換的字符‘ ‘要替換成的字符‘ :從標準輸入中替換特定字符,並將結果寫到標準輸出

sort -k [關鍵字段序號] [要排序的文件]: 對文本文件內容按照規定字段進行排序

<< ,here-document 的概念,這是輸入重定向的另一種形式。

將一對相同的定界符(例如eof)之間的輸入內容作為一個文件輸入,結尾的界定符要定格寫,前後不能有空格

3.管道

管道就是一種特殊的重定向,也就是對一個命令的輸出進行管道連接(即重定向),用作下一個命令的輸入
兩個命令之間使用 |(管道)操作符就是將第一個命令的 stdout 定向到第二個命令的 stdin

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

常用來作為接收數據管道命令有:grep,sed, awk, cut, head, tail,top, less, more,wc, join, sort, split 等等,都是些文本處理命令

grep [查找的關鍵字] [目標文件] 正則表達式 文本搜索命令

wc -l 統計行數。-c 統計字節數。-w 統計字數。一個字被定義為由空白、跳格或換行字符分隔的字符串。-L 打印最長行的長度。-m 統計字符數。這個標誌不能與 -c 標誌一起使用。

cut -c數字 切割文本,c代表字符,數字是切割的字符列序號 ,數字之間用逗號隔開

-f數字切割的字段序列號 -d“指定分隔符”

道的另外一種形式稱為命令替換。實現方法是將您希望使用其結果的命令封閉在反單引號(`[1])中或者封閉在 $( 和 ) 之間

4.

1、 模塊性原則:寫簡單的,通過幹凈的接口可被連接的部件;
2、 清楚原則:清楚要比小聰明好。
3、 合並原則:設計能被其它程序連接的程序。
4、 分離原則:從機制分離從策略,從實現分離出接口。
5、 簡單原則:設計要簡單;只有當你需要的時候,增加復雜性;
6、 節儉原則:只有當被證實是清晰,其它什麽也不做的時候,才寫大的程序
7、 透明原則:為使檢查和調試明顯更容易而設計
8、 健壯性原則:健壯性是透明和簡單的追隨者
9、 表現原則:把知識整理成資料,於是程序邏輯能變得易理解和精力充沛的。
10、 最小意外原則:在接口設計中,總是做最小意外事情
11、 沈默原則:當一個程序令人吃驚什麽也不說的時候,他應該就是什麽也不說
12、 修補補救:當你必須失敗的時候,盡可能快的吵鬧地失敗
13、 經濟原則:程序員的時間是寶貴的;優先機器時間節約它。
14、 產生原則:避免手工堆砌;當你可能的時候,編寫可以寫程序的程序;
15、 優化原則:在雕琢之前先有原型;在你優化它之前,先讓他可以運行;
16、 差異原則:懷疑所有聲稱的“唯一真理“
17、 可擴展原則:為將來做設計,因為它可能比你認為來的要快



重定向與管道