Linux下Bash的管線pipe命令,cut,grep,sort,wc,uniq,tee,tr,col,join,past,expand

管線命令

ls -al|grep xxx     , |後面就是管線命令

管線命令僅處理standard output,對於standard error output則會忽略

管線命令必須要能夠接受來自前一個指令的數據成爲standard input繼續處理才行


 

cut將一段信息的某一段給切出來,以行爲單位

cut  -d  '分割字符'  -f  第幾段

cut  -c   字符區間

-d:  後面接分割字符,與-f一起使用

-f:   依據-d的分割字符將一段字符串分割爲數段,後面接數字表示取第幾段

-c:  以字符的單位取出固定字幅區間


 

例:echo  $PATH  |  cut  -d  ':'  -f  5

       echo  $PATH  |  cut  -d  ':'  -f  3,5     獲得第3、5行的字符串

        echo  $PATH  |  cut  -c  12-20        獲得12-20位的字符串

        echo  $PATH  |  cut  -c  12-             獲得第12位以後的字符串
 


 

grep分析每行的信息,若有需要的信息就提取出來

grep  [-A]  [-B]  [-acinv]  [--color=auto]  '搜索字符串'  filename

-A:  後面可以加數字,爲after的意思,除了列出該行外,後續的n行也列出來

-B:  後面可以加數字,爲before的意思,除了列出該行外,前面的n行也列出來

-a:  將二進制文件用text文件方式查找數據

-c:  計算找到'搜索字符串'的次數

-i:   忽略大小寫不同,視大小寫相同

-n:  輸出行號

-v:  反向選擇,即顯示沒有'搜索字符串內容的那行

--color=auto:  將找到關鍵詞的部分加上顏色

例:

last  |  grep  'root'               取出有root的那一行

last  |  grep  -v  'root'          沒有root的就取出

last  |  grep  'root'  |  cut  -d  ' '  -f1        有root就取出,並且只取第一欄

grep  --color=auto  'MANPATH'  /etc/man.config         取出/etc/man.config內含有MANPATH的那幾行


 

sort排序,並且可依據數據類型進行排序

sort  [-fbMnrtuk]  [file  or  stdin]

-f:  忽略大小寫

-b:  忽略開頭部分的空格

-M:  用月份排序,英文的

-n:  使用數字排序,默認是文字

-r:  反向排序

-u:  uniq,只取一行

-t:  分隔符,默認tab

-k:  使用區間來排序


 

例:

cat  /etc/passwd  |  sort                個人賬號都記錄在/etc/passwd下,對賬號進行排序

cat /etc/passwd  |  sort -t  ':'  -k  3  -n   內容用:來分割,從第三欄排序

last  |  cut  -d  ''  -f2  |  sort  將輸出的數據僅取賬號,加以排序


 

uniq排序完成只顯示一列

uniq  [-ic]

-i:  忽略大小寫

-c:  進行計數


 

例:

last  |  cut  -d  '  '  -f1  |  sort  |  uniq          將賬號列出,僅取出賬號欄,進行排序後取出一位

last  |  cut  -d  '  '  -f1  |  sort  |  uniq  -c        將賬號列出,僅取出賬號欄,進行排序後取出一位,並顯示登錄次數
 


 

wc統計文件中有多少字,多少行,多少字符

wc  [-lwm]

-l:  僅列出行

-w:  僅列出多少字

-m:  多少字符

例:

cat  /etc/man.config  |  wc

輸出順序:行、字數、字符數


 

tee雙向重導向,將數據流(standard input)的處理過程的某段信息保存下來

tee  [-a]  file

-a:  以累加append的方式,將數據加入file中

例:

last  |  tee  last.list  |  cut  -d  " "  -f1         將last的輸出保存一份到last.list文件中

ls  -l  /home  |  tee  ~/homefile  |  more  將ls的數據保存一份到~/homefile,同時屏幕也輸出信息

ls  -l  /  |  tee  -a  ~/homefile  |  more        累加ls的數據到homefile
 


 

tee可以讓standard output轉存一份到文件內並同樣將數據輸出到屏幕


 

tr用來刪除文檔中的文字,或者是進行替換

tr  [-ds]  SET1

-d:  刪除字符串中SET1這個字符串

-s:  取代掉重複的字符串


 

col,將tab取代爲空格

col  [-xb]

-x:  將tab轉換成對應的空格

-b:  有反斜線/時,只保留反斜線後的那個字符

man  col  >  /root/col.man

vi  /root/col.man

col經常被用於將 man page 轉換爲純文本方便閱讀


 

join,有兩個文件,有相同數據的那行,將他們加在一起

join  [-ti12]  file1  file2

-t:  默認用空格分隔數據,並且比對第一段的數據,如果相同,就將兩個數據連成一行

-i:  忽略大小寫

-1:  第一個文件要用那個字段來分析

-2:  第二個文件要用那個字段來分析


 

paste直接將兩行黏在一起,中間用tab鍵隔開

paste  [-d]  file1  file2

-d:  後面可以接分割字符,默認tab

-  :如果file部分寫成-,表示來自standard input的信息


 

expand,將tab轉成空格鍵

expand  [-t]  file

-t:  後面可以接數字,定義一個tab代表多少空格,默認8個


 

split將文件分隔

split  [-bl]  file  PREFIX

-b:  後面可以接想要分隔的文件大小,可以加單位b,k,m

-l:  以行數來分隔

PREFIX:  分隔文件的前綴文字


 

xargs產生某個命令的參數

xargs  [-0epn]  command

-0:  如果輸入的stdin含有特殊字符,這個參數可以將它還原成一般字符

-e:  這個參數後接字符串,遇到這個字符串後停止

-p:  執行命令的參數時,會詢問使用者的意思

-n:  後面接次數,每次命令執行時要使用的參數個數


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章