UNIX 管道和過濾器


您可以連線在一起,使兩個命令從一個程式的輸出成為下一個程式的輸入。以這種方式連線的兩個或多個命令可以形成一個管。

要製作一個管道,放了兩個命令在命令列之間的豎線(|)。

當一個程式將其從另一個程式的輸入,該輸入執行某些操作,並寫入到標準輸出的結果,它被稱為作為一個過濾器。

grep命令:

grep程式搜尋一個或多個檔案的??行有一定的模式。語法是:

$grep pattern file(s)

這個名字源於“grep”的ED(UNIX行編輯器)命令g/re/p指“全域性搜尋所有包含一個正規表示式和列印。”  

正規表示式是一些純文字(一個字,例如)和/或特殊字元用於模式匹配。

grep最簡單的用法是看一個字組成的一個模式。它可以用在管道中,因而只有那些行包含一個給定的字串的輸入檔案被傳送到標準輸出。如果你不給grep的讀取一個檔案名時,它讀取標准輸入的所有過濾方案的工作方式:

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

有各種不同的選項,可以一起使用grep命令:

Option 描述
-v Print all lines that do not match pattern.
-n Print the matched line and its line number.
-l Print only the names of files with matching lines (letter "l")
-c Print only the count of matching lines.
-i Match either upper- or lowercase.

接下來,讓我們使用一個正規表示式,告訴grep來查詢線“carol”,由零個或多個其他字元在正規表示式簡稱為“*”),再其次是“Aug”。

在這裡,我們使用-i選項來區分大小寫的搜尋:

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

sort命令:

sort命令安排行的文字,字母或數位。下面的例子各種行在food檔案:

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

sort命令預設情況下,按字母順序排列的文字行。有很多的選擇,控制排序:

Option 描述
-n Sort numerically (example: 10 will sort after 2), ignore blanks and tabs.
-r Reverse the order of sort.
-f Sort upper- and lowercase together.
+x Ignore first x fields when sorting.

超過兩個命令可以連結到一個管道。以先前的管道使用grep的例子,我們可以進一步在August 修改的檔案大小順序進行排序。 

下面的管道由命令ls,grep和排序:

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

August 大小順序修改這條管道在你的目錄中的所有檔案進行排序,並將它們列印到終端螢幕。行數位順序排序選項+4Ñ跳過四個欄位(欄位由空格分隔),然後排序。

pg 和更多的命令:

一個長的輸出通常會壓縮在螢幕上,但如果你執行文字通過或pg作為一個過濾器,每屏顯示的文字後,顯示停止。

讓我們假設你有一個長的目錄列表。為了使其更易於閱讀排序列表,通過管道輸出如下:

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

螢幕將填補文字,其中包括按檔案大小順序排序的行了一屏。在螢幕底部是更迅速,在那裡你可以通過排序的文字鍵入一個命令來移動。

當你完成這個螢幕上,可以使用任何的討論更多程式中列出的命令。