




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第12章 管道和過(guò)濾器 通過(guò)前一章的學(xué)習(xí),我們已經(jīng)知道了怎樣從文件重定向輸入,和重定向輸出到文件。Shell還有一種功能,就是可以將兩個(gè)或多個(gè)程序連接到一起,以使一個(gè)程序的輸出變?yōu)橄乱粋€(gè)程序的輸入,以這種方式連接的兩個(gè)或多個(gè)程序就形成了管道。管道通常用于執(zhí)行一些復(fù)雜的數(shù)據(jù)處理操作。這些命令之間使用控制操作符(管道符)“|”(豎線)連接。管道的語(yǔ)法格式如下所示: $ command1 | command2 $ command1 | command2 | commandN 當(dāng)在兩個(gè)命令之間設(shè)置管道時(shí),管道符“|”左邊命令的標(biāo)準(zhǔn)輸出就變?yōu)榱斯艿婪皘”右邊命令的標(biāo)準(zhǔn)輸入。只要第一個(gè)命令向標(biāo)準(zhǔn)輸出寫入
2、,而第二個(gè)命令是從標(biāo)準(zhǔn)輸入讀取,那么這兩個(gè)命令就可以形成一個(gè)管道。大部分的Linux命令都可以用來(lái)形成管道。12.1.1 操作符|和之間的區(qū)別 乍看起來(lái),可能很難理解,由管道符|執(zhí)行的重定向與由重定向操作符執(zhí)行的重定向之間有什么不同。簡(jiǎn)單地說(shuō),重定向操作符將命令與文件連接,而管道符|將第一個(gè)命令的輸出與第二個(gè)命令的輸入連接。即,其含義的區(qū)別如下所示: $ command1 file1 $ command1 | command2 大部分的人學(xué)習(xí)管道時(shí)會(huì)嘗試如下命令,我們來(lái)看一下會(huì)發(fā)生什么: $ command1 command2 答案是,有時(shí)嘗試的結(jié)果將會(huì)很糟糕。12.1.1 操作符|和之間的區(qū)
3、別 這是一個(gè)實(shí)際的案例,一個(gè)Linux系統(tǒng)的管理員以超級(jí)用戶的身份執(zhí)行了如下命令: # cd /usr/bin # ls less 第一個(gè)命令是將當(dāng)前目錄切換到了大多數(shù)程序所存放的目錄,而第二個(gè)命令是告訴Shell用ls命令的輸出重寫文件less。因?yàn)?usr/bin目錄已經(jīng)包含了名稱為less(less程序)的文件,第二個(gè)命令用ls輸出的文本重寫了less程序,因此破壞了文件系統(tǒng)中的less程序。 這是使用重定向操作符誤操作重寫文件的一個(gè)教訓(xùn),所以在使用它時(shí)要謹(jǐn)慎。12.1.2 為什么使用管道 我們先看下面一組命令,使用mysqldump這個(gè)數(shù)據(jù)庫(kù)備份程序來(lái)備份一個(gè)叫做wiki的數(shù)據(jù)庫(kù): $
4、 mysqldump -u root -p password wiki /tmp/wikidb.backup $ gzip -9 /tmp/wikidb.backup $ scp /tmp/wikidb.backup userbackupserver:/backup/mysql/ 上述這組命令主要做了如下內(nèi)容: mysqldump命令用于將名稱為wiki的數(shù)據(jù)庫(kù)備份到文件/tmp/wikidb.backup。 gzip命令用于壓縮大的數(shù)據(jù)庫(kù)文件以節(jié)省磁盤空間。 scp命令用于將數(shù)據(jù)庫(kù)備份文件拷貝到遠(yuǎn)程的名稱為backupserver的備份服務(wù)器。 上述三個(gè)命令依次地運(yùn)行。然而,如果使用管道的話
5、,你就可以將mysqldump命令與gzip命令和ssh命令相連接,這樣就避免了創(chuàng)建臨時(shí)文件/tmp/wikidb.backup,而且可以同時(shí)執(zhí)行這些命令并達(dá)到相同的效果。12.1.2 為什么使用管道 使用管道后的命令如下所示: $ mysqldump -u root -ppassword wiki | gzip -9 | ssh userbackupserver cat /home/user/mysql/wikidb.gz 上述使用管道的命令具有如下特點(diǎn): 命令的語(yǔ)法緊湊并且使用簡(jiǎn)單。 通過(guò)使用管道,將三個(gè)命令串聯(lián)到了一起就完成了遠(yuǎn)程mysql備份的復(fù)雜任務(wù)。 從管道輸出的標(biāo)準(zhǔn)錯(cuò)誤會(huì)混合到一
6、起。12.1.3 實(shí)例:使用管道連接程序 通過(guò)本章前面內(nèi)容的學(xué)習(xí),我們已經(jīng)知道了,管道符是豎線“|”,使用這一操作符我們就可以將命令連接起來(lái)。例如,在下面的例子中,我們將ls命令的輸出發(fā)送到grep命令: $ ls | grep data.txt 上述命令是查看文件data.txt是否存在于當(dāng)前目錄下。 我們可以在命令的后面使用命令的選項(xiàng)或參數(shù)。例如,我們查看當(dāng)前目錄下是否有.bashrc文件: $ ls -al | grep .bashrc -rwxr-xr-x 1 yantaol group 12 Oct 10 12:52 .bashrc 管道符“|”與兩側(cè)的命令之間也不可以不存在空格。比
7、如,上述命令還可以寫為類似如下所示: $ ls -al|grep .bashrc -rwxr-xr-x 1 yantaol group 12 Oct 10 12:52 .bashrc12.1.3 實(shí)例:使用管道連接程序 然而,我還是推薦在管道符“|”和兩側(cè)的命令之間使用空格,以增加代碼的可讀性。 我們也可以重定向管道的輸出到一個(gè)文件。比如,我們將上述管道命令的輸出結(jié)果發(fā)送到文件/tmp/output.log中: $ ls -al | grep .bashrc /tmp/output.log 下面我們?cè)賮?lái)通過(guò)一些實(shí)例來(lái)學(xué)習(xí),如何使用管道來(lái)連接程序。12.1.4 實(shí)例:管道中的輸入重定向 輸入重定
8、向操作符可以在管道中使用,以用來(lái)從文件中獲取輸入。其語(yǔ)法類似如下所示: command1 input.txt | command2 command1 或?qū)⒐艿乐凶詈笠粋€(gè)命令的標(biāo)準(zhǔn)輸出進(jìn)行重定向。其語(yǔ)法類似如下所示: $ command1 | command2 | | commandN output.txt $ command1 output.txt 我們已經(jīng)知道,將幾個(gè)命令通過(guò)管道符組合在一起就形成一個(gè)管道。通常,通過(guò)這種方式被使用的命令就被稱為過(guò)濾器。過(guò)濾器會(huì)獲取輸入,通過(guò)某種方式修改其內(nèi)容,然后將其輸出。 簡(jiǎn)單地說(shuō),過(guò)濾器可以概括為以下兩點(diǎn): 如果一個(gè)linux命令是從標(biāo)準(zhǔn)輸入接收它的輸入
9、數(shù)據(jù),并在標(biāo)準(zhǔn)輸出上產(chǎn)生它的輸出數(shù)據(jù)(結(jié)果),那么這個(gè)命令就被稱為過(guò)濾器。 過(guò)濾器通常與Linux管道一起使用。 常用的被作為過(guò)濾器使用的命令如下所示: awk 用于文本處理的解釋性程序設(shè)計(jì)語(yǔ)言,通常被作為數(shù)據(jù)提取和報(bào)告的工具。 cut 用于將每個(gè)輸入文件(如果沒(méi)有指定文件則為標(biāo)準(zhǔn)輸入)的每行的指定部分輸出到標(biāo)準(zhǔn)輸出。 grep 用于搜索一個(gè)或多個(gè)文件中匹配指定模式的行。 tar 用于歸檔文件的應(yīng)用程序。 head 用于讀取文件的開(kāi)頭部分(默認(rèn)是10行)。如果沒(méi)有指定文件,則從標(biāo)準(zhǔn)輸入讀取。 paste 用于合并文件的行。 sed 用于過(guò)濾和轉(zhuǎn)換文本的流編輯器。 sort 用于對(duì)文本文件的行進(jìn)
10、行排序。 split 用于將文件分割成塊。 strings 用于打印文件中可打印的字符串。 tac 與cat命令的功能相反,用于倒序地顯示文件或連接文件。 tail 用于顯示文件的結(jié)尾部分。 tee 用于從標(biāo)準(zhǔn)輸入讀取內(nèi)容并寫入到標(biāo)準(zhǔn)輸出和文件。 tr 用于轉(zhuǎn)換或刪除字符。 uniq 用于報(bào)告或忽略重復(fù)的行。 wc 用于打印文件中的總行數(shù)、單詞數(shù)或字節(jié)數(shù)。 接下來(lái),我們來(lái)學(xué)習(xí)如何在管道中使用這些命令。12.2.1 實(shí)例:在管道中使用awk命令 我們將在第14章詳細(xì)介紹awk命令的使用,在這一節(jié)中,我們僅通過(guò)幾個(gè)簡(jiǎn)單的實(shí)例來(lái)了解一下awk命令在管道中的使用。12.2.2 實(shí)例:在管道中使用cut
11、命令 cut命令被用于文本處理。你可以使用這個(gè)命令來(lái)提取文件中指定列的內(nèi)容。12.2.3 實(shí)例:在管道中使用grep命令 grep命令是在管道中比較常用的一個(gè)命令。12.2.4 實(shí)例:在管道中使用tar命令 tar命令是Linux系統(tǒng)中最常用的打包文件的程序。12.2.5 實(shí)例:在管道中使用head命令 有時(shí),你不需要一個(gè)命令的全部輸出,可能只需要命令的前幾行輸出。這時(shí),你就可以使用head命令,它只打印命令的前幾行輸出。默認(rèn)的輸出行數(shù)為10行。12.2.6 實(shí)例:在管道中使用paste命令 paste命令用于合并文件的行,當(dāng)然,它也可以通過(guò)管道接收其它命令的輸出,并對(duì)其內(nèi)容進(jìn)行相應(yīng)的合并處理
12、。12.2.7 實(shí)例:在管道中使用sed命令 我們將在第14章詳細(xì)介紹sed命令的使用,在這一節(jié)中我們將通過(guò)幾個(gè)簡(jiǎn)單的實(shí)例來(lái)了解一下sed命令在管道中的使用。 sed命令是流編輯器(stream editor)的簡(jiǎn)稱。12.2.8 實(shí)例:在管道中使用sort命令 sort命令用于對(duì)文本文件的行進(jìn)行排序,當(dāng)然,它也可以通過(guò)管道對(duì)其它命令輸出的行進(jìn)行排序。12.2.9 實(shí)例:在管道中使用實(shí)例:在管道中使用split命令命令 split命令用于將文件分割成塊,同樣,也可以通過(guò)管道將其它命令輸出的內(nèi)容分割成指定大小的塊并存入指定前綴的文件中。12.2.10 實(shí)例:在管道中使用strings命令 str
13、ings命令用于打印文件中的可打印字符串,常用來(lái)與grep命令配合使用,在二進(jìn)制文件中查找字符串。12.2.11 實(shí)例:在管道中使用tail命令 tail命令用于打印文件的最后幾行,同樣,也可以通過(guò)管道顯示其它命令輸出的最后幾行內(nèi)容。12.2.12 實(shí)例:在管道中使用tee命令 tee命令用于(在同一時(shí)間)存儲(chǔ)和查看任意其它命令的輸出。使用tee命令,你可以從一個(gè)輸入流讀取輸入,并分隔輸出流到兩個(gè)重定向,所以輸出即顯示在屏幕(標(biāo)準(zhǔn)輸出)上也同樣重定向到一個(gè)文件中。12.2.13 實(shí)例:在管道中使用tr命令 tr命令用于轉(zhuǎn)換和刪除字符。12.2.14 實(shí)例:在管道中使用uniq命令 uniq命令用于報(bào)告或刪除重復(fù)的行:12.2.15 實(shí)例:在管道中使用wc命令 wc命令用于統(tǒng)計(jì)包含在文本流中的字符數(shù)、單詞數(shù)和行數(shù)。12.3 小結(jié) 下面我們總結(jié)一下本章所學(xué)的主要知識(shí): 管道:將兩個(gè)或多個(gè)程序連接到一起,以使一個(gè)程序的輸出可以變?yōu)橄乱粋€(gè)程序的輸入,以這種方式連接的兩個(gè)或多個(gè)程序就形成了管道。 重定向操作符將命令
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 早期矯形診療管理制度
- 生鮮連鎖店加盟管理制度
- 分公司財(cái)務(wù)垂直管理制度
- 科技圖書館設(shè)備管理制度
- 幼兒園晨檢物資管理制度
- 智能家居生產(chǎn)管理制度
- 公司小汽車用車管理制度
- 日本公司運(yùn)營(yíng)管理制度
- 變壓器公司運(yùn)維管理制度
- 日間化療中心管理制度
- 車站值班員(中級(jí))鐵路職業(yè)技能鑒定考試題及答案
- 山東省威海市2023-2024學(xué)年高二下學(xué)期期末考試英語(yǔ)試題(解析版)
- 2024年陜西省西安市中考地理試題卷(含答案逐題解析)
- 草晶華工作計(jì)劃
- 2023-2024學(xué)年吉安市遂川縣七年級(jí)語(yǔ)文(下)期末試卷附答案詳析
- 人工智能訓(xùn)練師(中級(jí)數(shù)據(jù)標(biāo)注員)理論考試題庫(kù)(含答案)
- 腦干損傷護(hù)理常規(guī)
- 小學(xué)數(shù)學(xué)組教研活動(dòng)記錄表-評(píng)課
- 2024年廣東清遠(yuǎn)連平縣事業(yè)單位招聘工作人員51人公開(kāi)引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(kù)(共500題)答案詳解版
- 2024年西部機(jī)場(chǎng)集團(tuán)榆林機(jī)場(chǎng)公司招聘35人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 銀行智能化方案設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論