利用管線命令、管線符號,來處理標準輸出:
管線(pipe)符號,指的是符號 |。語法:
命令一 | 命令二 | 命令三…
其作用是,將命令一執行成功後的標準輸出,當作執行命令二時的標準輸入,經過命令二執行成功後成為標準輸出,又再被當作執行命令三時的標準輸入…以此類推。
管線命令,就是可以透過管線符號|,將上一個命令的標準輸出當作標準輸入來執行的命令,常用於登錄檔的分析上。注意,管線符號只處裡標準輸出,而不處裡標準錯誤輸出。管線命令,介紹如下:
(1) cut:可以將標準輸入做分割,再做為標準輸出。用法有:
(1-1) cut -d "字元" -f N:將標準輸入以字元做為分割的依據,分割成好幾的片段,然後輸出第N個片段。N是正整數,從1開始數起。
例如,今有檔案名為persons,其內容為:weiwei,nunu,rain,A-du
命令列輸入:cat persons | cut -d "," -f 1 顯示:weiwei
命令列輸入:cat persons | cut -d "," -f 2 顯示:nunu
命令列輸入:cat persons | cut -d "," -f 3,4 顯示:rain,A-du
(1-2) cut -c 範圍:標準輸入中的每一行,都只輸出範圍內的字元。範圍的寫法可為:
※ N:表示第N個字元。
※ M-N:表示第M到第N個字元。
※ M-:表示第M到最後一個字元。
※ -N:表示第1到第N個字元。
(2) grep 選項 第二選項 "字串":從標準輸入中,搜尋其內容具有字串的那些行(註:字串,也可以正規表示法的形式來寫)。選項可以是:
※ -c :若其內容具有字串的行數為N行,就顯示N,不顯示這些行的具體內容。
※ -i :搜尋時,忽略字串的大小寫。
※ -n :顯示時,一併顯示出行號。
※ -v :顯示時,只顯示其內容不具有字串的那些行。
※ -E :若字串要用「延伸正規表示法」來寫,就必須有此選項,否則無效果。
第二選項,可以不寫,也可以是:
※ --color=auto:將搜尋結果中的字串用特殊顏色標明後再輸出。
舉例,設ls -l 顯示:
drwxr-xr-x 3 jjj kkk 2048 Mar 13 04:52 D1
drwxr-xr-x 16 jjj kkk 2048 May 19 11:53 D2
drwxr-xr-x 3 jjj kkk 2048 Mar 14 04:16 D3
-rw-r--r-- 1 jjj kkk 62 Sep 5 09:22 f1
-rw-r--r-- 1 jjj kkk 21 Sep 5 09:15 f2
-rw-r--r-- 1 jjj kkk 54 Sep 5 09:28 f3
則輸入:ls -l | grep "Sep" ,顯示:
-rw-r--r-- 1 jjj kkk 62 Sep 5 09:22 f1
-rw-r--r-- 1 jjj kkk 21 Sep 5 09:15 f2
-rw-r--r-- 1 jjj kkk 54 Sep 5 09:28 f3
※ 註(重要!):若要用grep搜尋檔案內容,也可以不接在管線命令後面,而可以直接使用,如:
grep 選項 第二選項 "字串" 檔案名
可以接搜尋檔案內容。
(3) sort:將標準輸入的每一行進行排序後再輸出。排序的依據,預設是由字元的ASCII碼由小排到大。其常用的用法有:
(3-1) sort:以每一行行首字元來進行排序,後再輸出。例如,今有檔案名為persons_data,其內容為:
name:age:height
weiwei:18:160
nunu:22:164
rain:19:159
A-du:20:162
輸入:cat persons_data | sort,顯示:
A-du:20:162
name:age:height
nunu:22:164
rain:19:159
weiwei:18:160
結果就是依據每一行行首字元進行排序後再輸出。
(3-2) sort –t "字元" –k N:將每一行依字元來分割成片段,分割後的第N段子字串,作為排序依據。以上例的persons_data來舉例:
輸入:cat persons_data | sort -t ":" -k 2 ,顯示:
weiwei:18:160
rain:19:159
A-du:20:162
nunu:22:164
name:age:height
結果就是依據「用:分割後的第二個子字串」進行排序後再輸出。
※ sort 和 sort –t "字元" –k N也可以不接在管線符號後面,而是其後面接檔案名,就會將檔案內容依據排序後再顯示出來。如:sort 檔案名和 sort –t "字元" –k N 檔案名。
(4) tee 選項 檔案:可將標準輸入的內容,存入檔案中,在原封不動送入標準輸出。若選項為空,代表要將檔案覆寫,若選項為-a,表示要將檔案添寫。
(5) tr:可以將標準輸入的內容,刪除或是取代,然後送入標準輸出。用法有:
(5-1) tr "字串一" "字串二":將標準輸入的內容中,字串一轉換為字串二,然後輸出。
(5-2) tr -d "字串":將標準輸入的內容中,字串給刪除之後輸出。常見的例子之一是為資料「接行」,以上例的persons_data為例,輸入:cat persons_data | tr -d "\r\n",顯示:name:age:heightweiwei:18:160nunu:22:164rain:19:159A-du:20:162
換行字元被刪除,則所有資料都變成單一行了。
(6) args 命令:args 可以將標準輸入轉變成該命令的輸入參數,以執行此命令。其目的,是因為有許多的命令無法直接與管線符號搭配使用,為了使這些命令也能夠享有管線符號帶來的便利,故才有了args。
範例如:設今有一檔,其名為dir_test,其內容為:
dir1 dir2 dir3
輸入命令:cat dir_test | xargs mkdir,即可將cat dir_test命令執行後的標準輸出當作mkdir命令的參數,於是便建立了dir1、dir2、dir3三個目錄。