1. 程式人生 > >Linux管道命令

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

這裡寫圖片描述