close

按此前往linux完整教學目錄

 

 

利用管線命令、管線符號,來處理標準輸出:

管線(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命令的參數,於是便建立了dir1dir2dir3三個目錄。

 

 

上一篇:bash 連續執行命令

下一篇:vim 基本操作

arrow
arrow

    埃伯 發表在 痞客邦 留言(1) 人氣()