Unix/Linux - 管道和過濾器



在本章中,我們將詳細討論 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命令一起使用各種選項:

序號 選項及描述
1

-v

列印所有不匹配模式的行。

2

-n

列印匹配的行及其行號。

3

-l

僅列印包含匹配行的檔名(字母“l”)。

4

-c

僅列印匹配行的計數。

5

-i

匹配大寫或小寫。

現在讓我們使用一個正則表示式,該表示式告訴 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命令按字母順序排列文字行。有很多選項可以控制排序:

序號 描述
1

-n

按數字順序排序(例如:10 將在 2 之後排序),忽略空格和製表符。

2

-r

反轉排序順序。

3

-f

將大寫和小寫字母一起排序。

4

+x

在排序時忽略前x個欄位。

可以將兩個以上命令連結到管道中。以之前使用grep的管道示例為例,我們可以進一步按大小順序對 8 月份修改的檔案進行排序。

以下管道由lsgrepsort命令組成:

$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
$

此管道按大小順序對您目錄中 8 月份修改的所有檔案進行排序,並在終端螢幕上列印它們。sort 選項 +4n 跳過四個欄位(欄位由空格分隔),然後按數字順序對行進行排序。

pg 和 more 命令

通常,您可以將螢幕上的長輸出壓縮,但是如果您透過 more 執行文字或使用pg命令作為過濾器;一旦螢幕上充滿了文字,顯示就會停止。

假設您有一個很長的目錄列表。為了更輕鬆地閱讀排序後的列表,請將輸出透過more傳遞,如下所示:

$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%)

一旦螢幕上充滿了由檔案大小順序排序的行,螢幕就會填滿。螢幕底部是more提示符,您可以在其中鍵入命令以瀏覽排序後的文字。

完成此屏幕後,您可以使用 more 程式討論中列出的任何命令。

廣告

© . All rights reserved.