Linux管道命令
1 什麼是管道命令?
管道命令能夠將一個命令的執行結果經過篩選,只保留我們需要的資訊。
如,/etc目錄下會有大量的檔案,如果使用ls很難找到需要的檔案,因此可以使用管道命令將ls的結果進行一次篩選,只保留需要的資訊。
2 管道 和 資料流重定向 的區別?
- 管道一詞非常生動形象,原始資料經過管道後,管道會將一部分不需要的資訊過濾掉,只保留使用者所關注的資訊。
- 資料流重定向是指定資料在哪裡顯示,預設情況下會在螢幕顯示,我們可以指定它輸出到檔案。
3 管道命令有哪些
3.1 選取指定列:cut
cut為剪下的意思,它能將一行行的資料按照指定的分隔符切成一列列,然後只顯示特定列的資料。
cut有兩種使用方式:
- 按照指定字元分隔
這個命令會按照特定的分隔符將資料切分,並只顯示第n列的資料。
cut -d '分隔符' -f n
例子:顯示環境變數PATH第1和6列的資料
echo $PATH | cut -d ':' -f 1,6
- 選擇特定範圍內的資料
cut -c 起始字元的下標-結束字元的下標
注意:cut中涉及的下標均從1開始。
3.2 關鍵詞搜尋指定行:grep
3.2.1 grep命令介紹
grep用於進行關鍵詞查詢,它會將檔案中含有關鍵詞的那一整行輸出來。
grep [-cinv] [--color=auto] '關鍵詞' 待查詢的檔名
-c:統計關鍵詞出現的次數
-i:關鍵詞忽略大小寫
-n:輸出行號
-v:反向選擇,即查詢不包含該關鍵詞的行
--color=auto:關鍵詞高亮
3.2.2 grep的兩種使用方式
3.2.2.1 方式1:grep [-引數] ‘關鍵詞’ 檔案
這種方式並沒有用到管道,只是從指定檔案中將符合關鍵詞的行搜尋出來。
3.2.2.2方式2:命令 | grep [-引數] ‘關鍵詞’
這種方式採用管道,將前一個命令的執行結果輸出給grep,並通過grep的關鍵詞搜尋將符合條件的行搜尋出來。
3.3 排序:sort
3.3.1 sort命令介紹
sort命令能夠將指定檔案 或 前一個命令的結果資料 按照指定欄位進行排序。
sort [-引數] 檔案
-t:指定分隔符
-k:選取分隔後的第幾個欄位進行排序
-f:排序時忽略選取欄位的大小寫
-b:去除選取欄位前的空格
-M:將選取的欄位按照月份來排序(前提是選取欄位就是月份)
-n:將選取欄位按照資料來排序(前提是選取欄位就是數字)
-r:反向排序
-u:去重。若選取欄位有重複,則去掉重複。
3.3.2 sort兩種使用方式
和grep一樣,sort也有兩種使用方式。
3.3.2.1 方式1:sort [-引數] 檔案
將檔案中的資料按照指定欄位排序。
3.3.2.2 方式2:命令 | sort [-引數]
使用管道,將前一個命令執行的結果按照指定欄位進行排序。
3.4 去除重複行:uniq
3.4.1 uniq命令介紹
uniq命令只能用於管道,它能夠去除前一個命令執行的結果中完全一樣的行。
uniq [-引數]
-i:忽略大小寫
-c:進行重複行的統計
3.4.2 uniq使用方式
該命令只能用於管道,如統計當前系統所有使用者的登入次數:
last | cut -d ' ' -f 1 | uniq -c
3.5 統計字數、行數、字元數:wc
3.5.1 wc命令介紹
wc [-引數]
-l:列出行數
-w:列出字數
-m:列出字元數
3.5.2 wc使用方法
wc只能通過管道使用:命令 | wc [-引數]
3.6 雙向重定向:tee
3.6.1 tee命令介紹
tee能夠同時將命令執行的結果輸出到指定的檔案和螢幕。
tee [-a] 檔案
-a:以追加的形式寫入檔案。
3.6.2 tee使用方式
tee只能和管道結合使用,如將last中的資訊輸出指檔案並顯示在螢幕上:
last | tee -a lastfile | cut -d ' ' f 1
last的所有資訊將會被寫入檔案lastfile中,然後資料流將會輸出到螢幕上,我們可以在輸出前再新增一條管道,只輸出資料的第一個欄位。
3.7 連線兩個檔案:join
3.7.1 join命令介紹
這個命令與管道無關。
它相當於資料庫中的join連線,將兩張表中指定欄位,且欄位相同的行連線起來。在這裡,它能夠將兩個檔案中指定欄位的相同欄位連線起來,併成一行。
3.7.2 join命令的用法
join [-引數] 檔案1 檔案2
-t:兩個檔案的欄位分隔符
-1:第一個檔案的欄位
-2:第二個檔案的欄位
-i:忽略選取欄位的大小寫
3.8 切割檔案:split
3.8.1 命令介紹
該命令能將一個大檔案切分成若干個小檔案。
3.8.2 命令用法
split [-引數] 大檔案 小檔名字字首
-b:指定小檔案的大小,需要加上單位:b、k、m
-l:指定每個小檔案中的行數。
大檔案會被切分成若干個小檔案,且小檔案的名字為:小檔名字字首+aa、小檔名字字首+ab、小檔名字字首+ac