linux中管道符是什麼
在linux中,管道符是“|”,主要用於將兩個或多個命令連接到一起,把一個命令的輸出作為下一個命令的輸入;語法“command1 | command2 [ | commandN... ]”,“|”符左邊指令的輸出會作為“|”符號右邊指令的輸入。管道符是可以連續使用的,第一個指令的輸出會作為第二個指令的輸入,第二個指令的輸出又會作為第三個指令的輸入,依此類推。
本教學操作環境:linux7.3系統、Dell G3電腦。
Shell 還有一個功能,就是可以將兩個或多個命令(程式或進程)連接在一起,把一個命令的輸出當作下一個命令的輸入,以這種方式連接的兩個或多個指令就形成了管道(pipe)。
Linux 管道使用豎線|
連接多個命令,這稱為管道符。
command1 | command2 command1 | command2 [ | commandN... ]
當在兩個指令之間設定管道時,管道符|左邊指令的輸出就變成了右邊指令的輸入。只要第一個指令向標準輸出寫入,而第二個指令是從標準輸入讀取,那麼這兩個指令就可以形成一個管道。大部分的 Linux 指令都可以用來形成管道。
管道符是可以連續使用的,第一個指令的輸出會作為第二個指令的輸入,第二個指令的輸出又會作為第三個指令的輸入,依此類推。
這裡需要注意,command1 必須有正確輸出,而command2 必須可以處理command2 的輸出結果;而且command2 只能處理command1 的正確輸出結果,不能處理command1 的錯誤訊息。
舉個栗子:對hello.sh檔案進行排序去重以後找出包含"better"的行
指令為:cat hello.sh | sort | uniq | grep 'better'
- 查看文字
- 排序 ##去重
- ##過濾
首先使用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這類的不是處理文字的指令均不支援管道
當rm後面不指定刪除的檔案時,則會報錯遺失參數,所以,rm等指令不支援從標準輸入讀取參數,只支援在命令列指定參數,也就是指定刪除的檔案。
[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]#登入後複製
標準輸入和命令列參數那個優先?
有以下兩個檔案[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 aaaa dddd cccc bbbb [root@linuxforliuhj test]# cat b.txt 1111 3333 4444 2222 [root@linuxforliuhj test]#
[root@linuxforliuhj test]# cat a.txt | sort aaaa bbbb cccc dddd [root@linuxforliuhj test]#
[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111 2222 3333 4444 [root@linuxforliuhj test]#
[root@linuxforliuhj test]# cat a.txt | sort b.txt - 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#
[root@linuxforliuhj test]# sort a.txt b.txt 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
以上是linux中管道符是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。
