Shell管道和過(guò)濾器的使用
一、Shell管道
Shell 還有一種功能,就是可以將兩個(gè)或者多個(gè)命令(程序或者進(jìn)程)連接到一起,把一個(gè)命令的輸出作為下一個(gè)命令的輸入,以這種方式連接的兩個(gè)或者多個(gè)命令就形成了管道(pipe)。
重定向和管道的區(qū)別:
- 重定向操作符>將命令與文件連接起來(lái),用文件來(lái)接收命令的輸出;
- 管道符|將命令與命令連接起來(lái),用第二個(gè)命令來(lái)接收第一個(gè)命令的輸出。
命令格式如下:
command > file command1 | command1
1、Shell管道
Linux 管道使用豎線|連接多個(gè)命令,這被稱為管道符。Linux 管道的具體語(yǔ)法格式如下:
command1 | command2 command1 | command2 [ | commandN... ]
當(dāng)在兩個(gè)命令之間設(shè)置管道時(shí),管道符|左邊命令的輸出就變成了右邊命令的輸入。只要第一個(gè)命令向標(biāo)準(zhǔn)輸出寫入,而第二個(gè)命令是從標(biāo)準(zhǔn)輸入讀取,那么這兩個(gè)命令就可以形成一個(gè)管道。
大部分的 Linux 命令都可以用來(lái)形成管道。
注意:
- 管道里面的 command只能處理其正確的輸出結(jié)果。
- 管道符|與兩側(cè)的命令之間也可以不存在空格,但是推薦在管道符|和兩側(cè)的命令之間使用空格,以增加代碼的可讀性。
示例1:將 ls 命令的輸出發(fā)送到 grep 命令
[root@centos7 tmp]# ls -al | grep test.sh -rw-r--r-- 1 root root 168 3月 3 12:27 test.sh
示例2:將上述管道命令的輸出結(jié)果發(fā)送到文件 output.txt 中
[root@centos7 tmp]# ls -al | grep test.sh >output.txt [root@centos7 tmp]# cat output.txt -rw-r--r-- 1 root root 168 3月 3 12:27 test.sh
示例3:查看指定程序的進(jìn)程運(yùn)行狀態(tài),并將輸出重定向到文件中。
[root@centos7 tmp]# ps aux | grep httpd > /tmp/ps.output
2、管道與輸入重定向
輸入重定向操作符<可以在管道中使用,以用來(lái)從文件中獲取輸入,其基本語(yǔ)法:
command1 < input.txt | command2 command1 < input.txt | command2 -option | command3
示例:使用 tr 命令從 demo.txt 文件中獲取輸入,然后通過(guò)管道將輸出發(fā)送給 sort 或 uniq 等命令:
[root@centos7 tmp]# cat demo.txt 百度一下 http://www.baidu.com/ shell 重定向 [root@centos7 tmp]# tr a-z A-Z <demo.txt | sort HTTP://WWW.BAIDU.COM/ SHELL 重定向 百度一下 [root@centos7 tmp]# tr a-z A-Z <demo.txt | sort | uniq HTTP://WWW.BAIDU.COM/ SHELL 重定向 百度一下 [root@centos7 tmp]#
3、管道與輸出重定向
可以使用重定向操作符>或>>將管道中的最后一個(gè)命令的標(biāo)準(zhǔn)輸出進(jìn)行重定向,其語(yǔ)法如下所示:
command1 | command2 | ... | commandN > output.txt command1 < input.txt | command2 | ... | commandN > output.txt
示例:使用 tr 命令將 demo.txt 文件中的內(nèi)容轉(zhuǎn)化為大寫,并使用 sort 命令將內(nèi)容排序,使用 uniq 命令去除重復(fù)的行,最后將輸出重定向到文件 demo_new.txt。
[root@centos7 tmp]# tr a-z A-Z <demo.txt | sort | uniq >demo_new.txt [root@centos7 tmp]# cat demo_new.txt HTTP://WWW.BAIDU.COM/ SHELL 重定向 百度一下 [root@centos7 tmp]#
二、Shell過(guò)濾器
1、Shell過(guò)濾器
將幾個(gè)命令通過(guò)管道符組合在一起就形成一個(gè)管道。通常,通過(guò)這種方式使用的命令就被稱為過(guò)濾器。過(guò)濾器會(huì)獲取輸入,通過(guò)某種方式修改其內(nèi)容,然后將其輸出。
過(guò)濾器可以概括為以下兩點(diǎn):
- 如果一個(gè) Linux 命令是從標(biāo)準(zhǔn)輸入接收它的輸入數(shù)據(jù),并在標(biāo)準(zhǔn)輸出上產(chǎn)生它的輸出數(shù)據(jù)(結(jié)果),那么這個(gè)命令就被稱為過(guò)濾器。
- 過(guò)濾器通常與 Linux 管道一起使用。
常用的被作為過(guò)濾器使用的命令如下所示:
下面通過(guò)實(shí)例來(lái)演示幾個(gè)過(guò)濾器命令的使用。
2、在管道中使用grep命令
grep命令(global search regular expression and print out the line的縮寫):用于全面搜索的正則表達(dá)式,并將結(jié)果輸出。
人們通常會(huì)將grep命令與正則表達(dá)式搭配使用,參數(shù)作為搜索過(guò)程中的補(bǔ)充或?qū)敵鼋Y(jié)果的篩選,命令模式十分靈活。
語(yǔ)法格式:grep 參數(shù) 文件名
常用參數(shù):
示例1:查看 demo文件中的 www信息。
[root@centos7 tmp]# grep -i "Www" /tmp/demo.txt http://www.baidu.com/ [root@centos7 tmp]# grep -i "Www" /tmp/demo.txt | less
示例2:查看系統(tǒng)中 HTTP 服務(wù)的進(jìn)程信息。
[root@centos7 tmp]# ps auxwww | grep httpd
示例3:查找我們的程序列表中所有命令名中包含關(guān)鍵字 zip 的命令。
[root@centos7 tmp]# ls /bin /usr/bin | sort | uniq | grep zip bunzip2 bzip2 bzip2recover funzip gpg-zip gunzip gzip unzip unzipsfx zip zipcloak zipgrep zipinfo zipnote zipsplit [root@centos7 tmp]#
示例4:查看系統(tǒng)安裝的 kernel 版本及相關(guān)的 kernel 軟件包。
[root@centos7 tmp]# rpm -qa | grep kernel kernel-headers-3.10.0-957.el7.x86_64 kernel-3.10.0-957.el7.x86_64 kernel-tools-3.10.0-957.el7.x86_64 kernel-tools-libs-3.10.0-957.el7.x86_64 abrt-addon-kerneloops-2.1.11-52.el7.centos.x86_64 [root@centos7 tmp]#
3、在管道中使用 head 命令
有時(shí),你不需要一個(gè)命令的全部輸出,可能只需要命令的前幾行輸出。這時(shí),就可以使用 head 命令.
head命令的功能是顯示文件開頭的內(nèi)容,默認(rèn)為前10行。
語(yǔ)法格式:head 參數(shù) 文件名
常用參數(shù):
示例1:顯示 ls 命令的前 10 行輸出。
[root@centos7 tmp]# ls /usr/bin | head [ a2p ab abrt-action-analyze-backtrace abrt-action-analyze-c abrt-action-analyze-ccpp-local abrt-action-analyze-core abrt-action-analyze-oops abrt-action-analyze-python abrt-action-analyze-vmcore [root@centos7 tmp]#
示例2:顯示 ls 命令的前 5 行內(nèi)容。
[root@centos7 tmp]# ls /tmp | head -n 5 demo.txt err.log error.log info.log output.txt [root@centos7 tmp]#
4、在管道中使用 wc 命令
wc 命令:wc命令(word count的縮寫):其功能是統(tǒng)計(jì)文件的字節(jié)數(shù)、單詞數(shù)、行數(shù)等信息,并將統(tǒng)計(jì)結(jié)果輸出到終端界面。
基本語(yǔ)法格式:wc 參數(shù) 文件名
常見參數(shù)如下:
示例1:統(tǒng)計(jì)當(dāng)前登錄到系統(tǒng)的用戶數(shù)。
[root@centos7 tmp]# who | wc -l 1
示例2:統(tǒng)計(jì)當(dāng)前的 Linux 系統(tǒng)中的進(jìn)程數(shù)。
[root@centos7 tmp]# ps -ef | wc -l 121
示例3:顯示 ls 命令的前 5 行內(nèi)容。然后統(tǒng)計(jì)當(dāng)前內(nèi)容的行數(shù)。
[root@centos7 tmp]# ls /tmp | head -n 5 | wc -l 5
到此這篇關(guān)于Shell管道和過(guò)濾器的使用的文章就介紹到這了,更多相關(guān)Shell管道和過(guò)濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell 中數(shù)學(xué)計(jì)算總結(jié)
shell中的賦值和操作默認(rèn)都是字符串處理,在此記下shell中進(jìn)行數(shù)學(xué)運(yùn)算的幾個(gè)特殊方法,以后用到的時(shí)候可以來(lái)看,呵呵2012-09-09shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測(cè)
這篇文章主要介紹了shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測(cè),本文給出的腳本使用對(duì)比MD5的方法,檢測(cè)linux系統(tǒng)文件是否被替換等問(wèn)題,需要的朋友可以參考下2014-12-12Linux使用pidof命令來(lái)快速查找進(jìn)程id
pidof 是一個(gè)簡(jiǎn)單而強(qiáng)大的命令行工具,廣泛應(yīng)用于進(jìn)程管理和腳本編程中,理解如何有效地使用它可以大大提高你的工作效率,本文給大家介紹了Linux使用pidof命令來(lái)快速查找進(jìn)程id的方法,需要的朋友可以參考下2025-03-03學(xué)習(xí)shell腳本之前的基礎(chǔ)知識(shí)[圖文]
在學(xué)習(xí)shell腳本之前,需要你了解很多關(guān)于shell的知識(shí),這些知識(shí)是編寫shell腳本的基礎(chǔ),所以希望你能夠熟練的掌握2013-03-03Linux命令學(xué)習(xí)之用戶切換su,sudo命令詳解
在操作過(guò)程中需要使用特定的用戶進(jìn)行特定的操作,多數(shù)情況下是因?yàn)闄?quán)限,比如要修改一個(gè)文件,只有root用戶有權(quán)限修改,那么就要切換到root用戶下進(jìn)行操作,本文給大家講解Linux命令學(xué)習(xí)之用戶切換su,sudo命令,感興趣的朋友跟隨小編一起看看吧2023-02-02shell進(jìn)程監(jiān)控的實(shí)現(xiàn)(ps、sleep、kill)
本文主要介紹了shell進(jìn)程監(jiān)控的實(shí)現(xiàn)(ps、sleep、kill),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06shell腳本自動(dòng)修復(fù)mysql損壞的表
這篇文章主要介紹了shell腳本如何自動(dòng)修復(fù)mysql損壞的表,需要的朋友可以參考下2015-10-10實(shí)戰(zhàn)模擬監(jiān)控MySQL服務(wù)shell腳本小結(jié)
老男孩shell培訓(xùn)課上帶領(lǐng)學(xué)生練習(xí)shell開發(fā)if語(yǔ)句時(shí)的幾個(gè)小例子和大家分享,需要的朋友可以參考下2016-05-05