站長資訊網
        最全最豐富的資訊網站

        linux中管道符是什么

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

        linux中管道符是什么

        本教程操作環境:linux7.3系統、Dell G3電腦。

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

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

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

        當在兩個命令之間設置管道時,管道符|左邊命令的輸出就變成了右邊命令的輸入。只要第一個命令向標準輸出寫入,而第二個命令是從標準輸入讀取,那么這兩個命令就可以形成一個管道。大部分的 Linux 命令都可以用來形成管道。

        管道符是可以連續使用的,第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。

        linux中管道符是什么

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

        舉個栗子:對hello.sh文件進行排序去重以后找出包含"better"的行

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

        • 查看文本
        • 排序
        • 去重
        • 過濾
          linux中管道符是什么

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

        首先使用cat命令查看文本,打印到屏幕上內容即為cat命令的輸出結果

        [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命令輸出的結果通過管道丟給sort命令,所以sort命令是對前面cat命令輸出的文本進行排序

        [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結合使用才能有效去重,所以通過管道將sort處理后輸出的文本丟給uniq處理,所以uniq處理的是排序好的文本,可以進行有效去重

        [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命令處理后輸出的文本進行過濾

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

        重點來了!

        重點來了!

        重點來了!

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

        那什么樣的命令支持管道,什么樣的命令不支持管道呢?
        一般情況下,處理文本的命令,例如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后面沒有參數時,則對管道符丟給它的前一個命令的輸出結果進行處理(即前一個命令的標準輸出作為本次命令的標準輸入)

        [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]#

        當rm后面不指定刪除的文件時,則會報錯丟失參數,所以,rm等命令不支持從標準輸入讀取參數,只支持在命令行指定參數,即指定刪除的文件。

        標準輸入和命令行參數那個優先?

        有如下兩個文件

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

        執行命令:cat a.txt | sort

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

        當sort的命令行參數為空時,默認使用前一個命令的輸出結果作為本次命令的輸入

        執行命令:cat a.txt | sort b.txt

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

        可以看到,當sort的命令行參數(此處為b.txt)不為空時,sort不會讀取標準輸入里的參數,而時讀取命令行參數

        執行命令: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]#

        " – "表示標準輸入,即命令cat a.txt 的輸出,相當與對文件b.txt和標準輸入一起進行排序,相當于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等命令,我們寫腳本時常常會遇到需要查詢某個進程的進程號然后殺掉該進程,查找某個文件然后刪除它這樣的需求,該怎么辦呢?那就用xargs吧!

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品乱码久久久久久久| 国产亚洲精品a在线观看app| 精品熟女少妇av免费久久| 国产精品麻豆VA在线播放| 国产成人久久精品激情 | 国产精品毛片一区二区三区 | 亚洲精品亚洲人成在线观看| 国产在线精品福利大全| 国产一精品一av一免费爽爽| 久久精品人成免费| 亚洲AV乱码久久精品蜜桃| 欧美成人精品第一区二区| 国产精品熟女福利久久AV| 久久精品国产91久久综合麻豆自制| 国产精品亚洲аv无码播放| 人妻少妇偷人精品无码| 亚洲国产另类久久久精品小说| 四虎国产精品永久在线无码| 久久精品一区二区三区中文字幕| 国产精品日韩深夜福利久久 | 久久精品黄AA片一区二区三区| 伊人 久久 精品| 亚洲av无码国产精品色在线看不卡| 精品人妻无码专区中文字幕| 国产偷国产偷高清精品| 国产一区二区精品久久岳| 国产精品小黄鸭一区二区三区| 国产成人亚洲精品影院 | 国产精品v欧美精品v日韩| 56prom精品视频在放免费| 青青草精品视频| 成人国产精品秘 果冻传媒在线| 99久久99久久精品国产片| 99久久精品国产综合一区| 国产精品青草久久久久福利99| 国产免费伦精品一区二区三区| 99久久精品国产一区二区蜜芽 | 国产精品免费久久| 精品国产午夜福利在线观看| 久久www免费人成精品香蕉| 欧美精品免费专区在线观看|