欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux中管道符的作用是什么

本文小編為大家詳細(xì)介紹“l(fā)inux中管道符的作用是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“l(fā)inux中管道符的作用是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),漯河網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:漯河等地區(qū)。漯河做網(wǎng)站價(jià)格咨詢:18982081108

在linux中,管道符是“|”,主要用于將兩個(gè)或者多個(gè)命令連接到一起,把一個(gè)命令的輸出作為下一個(gè)命令的輸入;語法“command1 | command2 [ | commandN... ]”,“|”符左邊命令的輸出會(huì)作為“|”符右邊命令的輸入。管道符是可以連續(xù)使用的,第一個(gè)命令的輸出會(huì)作為第二個(gè)命令的輸入,第二個(gè)命令的輸出又會(huì)作為第三個(gè)命令的輸入,依此類推。

本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

Shell 還有一種功能,就是可以將兩個(gè)或者多個(gè)命令(程序或者進(jìn)程)連接到一起,把一個(gè)命令的輸出作為下一個(gè)命令的輸入,以這種方式連接的兩個(gè)或者多個(gè)命令就形成了管道(pipe)。

Linux 管道使用豎線|連接多個(gè)命令,這被稱為管道符。

command1 | command2
command1 | command2 [ | commandN... ]

當(dāng)在兩個(gè)命令之間設(shè)置管道時(shí),管道符|左邊命令的輸出就變成了右邊命令的輸入。只要第一個(gè)命令向標(biāo)準(zhǔn)輸出寫入,而第二個(gè)命令是從標(biāo)準(zhǔn)輸入讀取,那么這兩個(gè)命令就可以形成一個(gè)管道。大部分的 Linux 命令都可以用來形成管道。

管道符是可以連續(xù)使用的,第一個(gè)命令的輸出會(huì)作為第二個(gè)命令的輸入,第二個(gè)命令的輸出又會(huì)作為第三個(gè)命令的輸入,依此類推。

linux中管道符的作用是什么

這里需要注意,command1 必須有正確輸出,而 command2 必須可以處理 command2 的輸出結(jié)果;而且 command2 只能處理 command1 的正確輸出結(jié)果,不能處理 command1 的錯(cuò)誤信息。

舉個(gè)栗子:對hello.sh文件進(jìn)行排序去重以后找出包含"better"的行

命令為:cat hello.sh | sort | uniq | grep 'better’

  • 查看文本

  • 排序

  • 去重

  • 過濾
    linux中管道符的作用是什么

【1】第一道工序——查看文本

首先使用cat命令查看文本,打印到屏幕上內(nèi)容即為cat命令的輸出結(jié)果

[root@linuxforliuhj test]# cat hello.sh 
hello this is linux
be better
be better
i am lhj
hello this is linux
i am lhj
i am lhj
be better
i am lhj
have a nice day
have a nice day
hello this is linux
hello this is linux
have a nice day
zzzzzzzzzzzzzz
dddddddd
gggggggggggggggggggg
[root@linuxforliuhj test]#

【2】第二道工序——排序

將前面cat命令輸出的結(jié)果通過管道丟給sort命令,所以sort命令是對前面cat命令輸出的文本進(jìn)行排序

[root@linuxforliuhj test]# cat hello.sh | sort
be better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

【3】第三道工序——去重

前面介紹uniq的文章中提到,sort跟uniq結(jié)合使用才能有效去重,所以通過管道將sort處理后輸出的文本丟給uniq處理,所以uniq處理的是排序好的文本,可以進(jìn)行有效去重

[root@linuxforliuhj test]# cat hello.sh | sort | uniq
be better
dddddddd
gggggggggggggggggggg
have a nice day
hello this is linux
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

【4】第四道工序——過濾

最后一步過濾則同樣是將前面命令即uniq命令處理后輸出的文本進(jìn)行過濾

[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'
be better
[root@linuxforliuhj test]#

重點(diǎn)來了!

重點(diǎn)來了!

重點(diǎn)來了!

以上的cat、sort、uniq、grep等命令均支持管道符,是因?yàn)檫@些命令均可從標(biāo)準(zhǔn)輸入中讀取要處理的文本(即從標(biāo)準(zhǔn)輸入中讀取參數(shù));而對于部分命令,例如rm、kill等命令則不支持從標(biāo)準(zhǔn)輸入中讀取參數(shù),只支持從命令行中讀取參數(shù)(即rm命令后面必須指定刪除的文件或者目錄,kill命令后面必須要指定殺死的進(jìn)程號等)

那什么樣的命令支持管道,什么樣的命令不支持管道呢?
一般情況下,處理文本的命令,例如sort、uniq、grep、awk、sed等命令均支持管道;像rm、ls這類的不是處理文本的命令均不支持管道

[root@linuxforliuhj test]# cat hello.sh | sort
be better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

sort后面沒有參數(shù)時(shí),則對管道符丟給它的前一個(gè)命令的輸出結(jié)果進(jìn)行處理(即前一個(gè)命令的標(biāo)準(zhǔn)輸出作為本次命令的標(biāo)準(zhǔn)輸入)

[root@linuxforliuhj test]# ls
beifen.txt  hello.sh  mk  read.ln  read.sh  read.txt  sub.sh
[root@linuxforliuhj test]# ls | grep read.sh
read.sh
[root@linuxforliuhj test]# ls | grep read.sh | rm
rm: missing operand
Try 'rm --help' for more information.
[root@linuxforliuhj test]#

當(dāng)rm后面不指定刪除的文件時(shí),則會(huì)報(bào)錯(cuò)丟失參數(shù),所以,rm等命令不支持從標(biāo)準(zhǔn)輸入讀取參數(shù),只支持在命令行指定參數(shù),即指定刪除的文件。

標(biāo)準(zhǔn)輸入和命令行參數(shù)那個(gè)優(yōu)先?

有如下兩個(gè)文件

[root@linuxforliuhj test]# cat a.txt 
aaaa
dddd
cccc
bbbb
[root@linuxforliuhj test]# cat b.txt 
1111
3333
4444
2222
[root@linuxforliuhj test]#

執(zhí)行命令:cat a.txt | sort

[root@linuxforliuhj test]# cat a.txt | sort
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

當(dāng)sort的命令行參數(shù)為空時(shí),默認(rèn)使用前一個(gè)命令的輸出結(jié)果作為本次命令的輸入

執(zhí)行命令:cat a.txt | sort b.txt

[root@linuxforliuhj test]# cat a.txt | sort b.txt 
1111
2222
3333
4444
[root@linuxforliuhj test]#

可以看到,當(dāng)sort的命令行參數(shù)(此處為b.txt)不為空時(shí),sort不會(huì)讀取標(biāo)準(zhǔn)輸入里的參數(shù),而時(shí)讀取命令行參數(shù)

執(zhí)行命令:cat a.txt | sort b.txt -

[root@linuxforliuhj test]# cat a.txt | sort b.txt -
1111
2222
3333
4444
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

" - "表示標(biāo)準(zhǔn)輸入,即命令cat a.txt 的輸出,相當(dāng)與對文件b.txt和標(biāo)準(zhǔn)輸入一起進(jìn)行排序,相當(dāng)于sort a.txt b.txt

[root@linuxforliuhj test]# sort a.txt b.txt
1111
2222
3333
4444
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

思考:對于rm、kill等命令,我們寫腳本時(shí)常常會(huì)遇到需要查詢某個(gè)進(jìn)程的進(jìn)程號然后殺掉該進(jìn)程,查找某個(gè)文件然后刪除它這樣的需求,該怎么辦呢?那就用xargs吧!

讀到這里,這篇“l(fā)inux中管道符的作用是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞名稱:linux中管道符的作用是什么
當(dāng)前路徑:http://www.chinadenli.net/article22/ishhjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)全網(wǎng)營銷推廣App開發(fā)外貿(mào)建站網(wǎng)站維護(hù)App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司