在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 管道和過濾器
通信工具
信號和 Traps
文件管理
vi 編輯器使用向?qū)?/span>
替代
變量
環(huán)境
進(jìn)程管理
實用工具
引用機(jī)制
Manpage 幫助
文件系統(tǒng)基礎(chǔ)知識
系統(tǒng)日志
循環(huán)
正則表達(dá)式和 SED
目錄
函數(shù)
管道和過濾器
特殊變量
輸入/輸出重定向
系統(tǒng)性能
用戶管理
循環(huán)控制
決策
什么是 UNIX ?
數(shù)組
什么是 Shell 腳本
基本操作符
文件權(quán)限

管道和過濾器

你可以連接兩個命令在一起,這樣一個程序的輸出就可以作為下一個程序的輸入。兩個或兩個以上的命令以這種方式連接形成一個管道。

為了形成管道,在同一行中利用一個豎線(|)將兩個命令隔開。

如果一個程序?qū)⒘硪粋€程序的輸出作為輸入數(shù)據(jù),接著對輸入的數(shù)據(jù)執(zhí)行一些操作,并將結(jié)果寫入標(biāo)準(zhǔn)輸出,它就稱為一個過濾器。

grep 命令

grep 程序用固定的模式搜索一個文件或多個文件。它的語法是:

$grep pattern file(s)

“grep” 這個名字來源于 ed(UNIX 行編輯器)命令,g/re/p 這意味著“利用正則表達(dá)式進(jìn)行全局搜索并打印所有包含它的行?!?/p>

正則表達(dá)式是一些純文本 (例如,一個詞) 和 / 或特殊字符,它被用于模式匹配。

最簡單的 grep 使用就是匹配由一個詞組成的模式。它可可以管道中使用,因此只有那些輸入行中包含一個給定的字符串,才會被發(fā)送到標(biāo)準(zhǔn)輸出。如果你不指定 grep 讀取的文件名,它讀取標(biāo)準(zhǔn)輸入,這也是所有過濾程序工作的方式:

$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 命令中進(jìn)行使用:

參數(shù) 描述
-v 打印所有沒有匹配的行。
-n 打印所有成功匹配的行和行號。
-l 打印匹配的文件名和匹配的行("l"來自字母 letter)。
-c 僅僅打印成功匹配到行的個數(shù)。
-i 同時匹配大小寫。

接下來,讓我們使用一個正則表達(dá)式,它讓 grep 命令找到包含 “carol” 字母的行,緊隨其后的可以是零個或多個字母,正則表達(dá)式中表示方法是 “.*”),之后接著是 “Aug” 字符。

如下是使用 -i 參數(shù),表示對字母大小寫不敏感:

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

sort 命令

sort 命令是按字母順序或者數(shù)字順序?qū)π形谋具M(jìn)行排序。下面的示例是對 food 文件中的文本進(jìn)行排序:

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

sort 命令默認(rèn)是按字母順序進(jìn)行排序。有很多可選參數(shù),可以控制排序:

參數(shù)描述
-n 數(shù)值順序進(jìn)行排序 (例如: 10 將會被排到 2 之后),忽略空格和 tab 符。
-r 將排序的順序反轉(zhuǎn)。
-f 將大小寫排在一起。
+x 排序的時候忽略第一個 x 字段。

兩個或者兩個以上的命令就可以形成管道。拿前面提到的 grep 命令為例,我們可以按照文件的大小進(jìn)一步對 August 文件進(jìn)行排序。

如下管道包含了 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 目錄下的文件進(jìn)行排序,并將它們打印到終端屏幕。排序參數(shù) +4n 會跳過 4 個字段(由空格分隔的字段),接著在按照數(shù)值順序?qū)π羞M(jìn)行排序。

pg 和 more 命令介紹

過長的輸出通常會在您的屏幕上被壓縮,但是如果你通過使用 more 或 pg 命令作為過濾器,知道屏幕顯示滿了文本之后才會停止。

假設(shè)你有一個很長的目錄列表。為了讓它容易閱讀,我們就要對它進(jìn)行排序,通過使用 more 命令對管道的輸出進(jìn)行處理:

$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ù)。

當(dāng)屏幕上顯示完成的時候,你接著可以使用在討論部分說的任何關(guān)于 more 程序的命令。

上一篇:特殊變量下一篇:輸入/輸出重定向