你可以連接兩個命令在一起,這樣一個程序的輸出就可以作為下一個程序的輸入。兩個或兩個以上的命令以這種方式連接形成一個管道。
為了形成管道,在同一行中利用一個豎線(|)
將兩個命令隔開。
如果一個程序?qū)⒘硪粋€程序的輸出作為輸入數(shù)據(jù),接著對輸入的數(shù)據(jù)執(zhí)行一些操作,并將結(jié)果寫入標準輸出,它就稱為一個過濾器。
grep 程序用固定的模式搜索一個文件或多個文件。它的語法是:
$grep pattern file(s)
“grep” 這個名字來源于 ed(UNIX 行編輯器)命令,g/re/p
這意味著“利用正則表達式進行全局搜索并打印所有包含它的行?!?/p>
正則表達式是一些純文本 (例如,一個詞) 和 /
或特殊字符,它被用于模式匹配。
最簡單的 grep 使用就是匹配由一個詞組成的模式。它可可以管道中使用,因此只有那些輸入行中包含一個給定的字符串,才會被發(fā)送到標準輸出。如果你不指定 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
$
如下是各種可選的參數(shù),你可以在 grep 命令中進行使用:
參數(shù) | 描述 |
---|---|
-v | 打印所有沒有匹配的行。 |
-n | 打印所有成功匹配的行和行號。 |
-l | 打印匹配的文件名和匹配的行("l"來自字母 letter)。 |
-c | 僅僅打印成功匹配到行的個數(shù)。 |
-i | 同時匹配大小寫。 |
接下來,讓我們使用一個正則表達式,它讓 grep 命令找到包含 “carol” 字母的行,緊隨其后的可以是零個或多個字母,正則表達式中表示方法是 “.*”),之后接著是 “Aug” 字符。
如下是使用 -i 參數(shù),表示對字母大小寫不敏感:
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
sort 命令是按字母順序或者數(shù)字順序?qū)π形谋具M行排序。下面的示例是對 food 文件中的文本進行排序:
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
sort 命令默認是按字母順序進行排序。有很多可選參數(shù),可以控制排序:
參數(shù) | 描述 |
---|---|
-n | 數(shù)值順序進行排序 (例如: 10 將會被排到 2 之后),忽略空格和 tab 符。 |
-r | 將排序的順序反轉(zhuǎn)。 |
-f | 將大小寫排在一起。 |
+x | 排序的時候忽略第一個 x 字段。 |
兩個或者兩個以上的命令就可以形成管道。拿前面提到的 grep 命令為例,我們可以按照文件的大小進一步對 August 文件進行排序。
如下管道包含了 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
$
上面的管道將會按照文件的大小對 August 目錄下的文件進行排序,并將它們打印到終端屏幕。排序參數(shù) +4n
會跳過 4 個字段(由空格分隔的字段),接著在按照數(shù)值順序?qū)π羞M行排序。
過長的輸出通常會在您的屏幕上被壓縮,但是如果你通過使用 more 或 pg 命令作為過濾器,知道屏幕顯示滿了文本之后才會停止。
假設(shè)你有一個很長的目錄列表。為了讓它容易閱讀,我們就要對它進行排序,通過使用 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%)
屏幕將會充滿文本數(shù)據(jù),這些文本是按照文件大小順序的。在屏幕的底端是一個 more 命令,你可以敲入命令讓屏幕滾動顯示更多的數(shù)據(jù)。
當屏幕上顯示完成的時候,你接著可以使用在討論部分說的任何關(guān)于 more 程序的命令。
更多建議: