- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是 Linux?
- Unix/Linux - 入門指南
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本實用程式
- Unix/Linux - 管道和過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是 Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
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 月份修改的檔案進行排序。
以下管道由ls、grep和sort命令組成:
$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 程式討論中列出的任何命令。