Linux下的標準輸入,輸出,重定向,管道
阿新 • • 發佈:2020-08-13
Linux系統中,有4個特殊符號 < > | - 在我們處理輸入和輸出時存在重要但具有迷惑性的作用
- > 表示重定向 , >filename就是把標準輸出村儲存到檔案filename裡面,標準錯誤錯誤還是會顯示在螢幕上。
- 2 >&1 表示把標準錯誤重定向到標準輸出。Linux終端用2表示標準錯誤,1表示標準輸出。
- -(短橫線) 表示標準輸入,一般用於一個程式需要多個輸入的時候。
- < 標準輸入,後面可以跟產生輸出的命令,一般用於一個程式需要多個輸入的時候,相比-適用範圍更廣
- | 管道符,表示把前一個命令的輸出作為後一個命令的輸入。用於資料在不同的命令之間傳輸,用途是減少硬碟存取損耗。
#! /bin/bash echo "I am std output" #下面是隨筆寫的一個理論上不存在的命令,會報錯 unexisted_command #輸出 #I am std output #stdout_error.sh: 行 4: unexisted_command:未找到命令
cat <<END | diff - <(echo "1 2 3" | tr ' ' '\n') >2 >2 >4 >END 0a1 >1 3d3 <4 #diff是比較兩個檔案的差異,需要兩個引數 #-(短橫線)表示上一個命令的引數,傳遞給diff #< 表示其後的命令的輸出,也重定向給diff
管道符的更多應用
echo "actgaaaaacccccg" | tr ' ' '\n' | wc -l >3 echo "a b c" | tr ' ' '\n' | sed = 1 a 2 b 3 c #sed = :先輸出行號,再輸出每行內容 echo "actg aaaaa ccccg" | tr ' ' '\n' | sed = | sed 'N;s/\n/\t/g' >1 actg >2 aaaaa >3 cccccg #N表示讀入下一行;sed命令每次只讀一行,加上N;之後,就是快取了第二行 #s:替換