[Linux]可用於管道操作的命令


管道命令——|

command1 | command2 | command3

注:管道命令必須能夠接受來自前一個命令的數據成為standard input繼續處理。

 

cut 將一段信息的某一段切出來,處理的信息是以行為單位。

cut -d '分割字符' -f fields
cut -c 字符范圍

參數:

-d : 后面接分隔符,與-f一起使用;

-f : 依據-d的分隔符將一段信息切割成為數段,用-f取出第幾段的意思;

-c : 以字符(characters)的單位取出固定字符區間;

echo $PATH | cut -d ':' -f 3-5
//將path的值按照':'進行分割,后取出第3到5個值
export | cut -c 12-
//對export的輸出進行切分,每行輸出從第12個字符往后的內容

 

grep 分析一行信息,如果有匹配的,就將該行拿出來。

grep [-acinv] [--color=auto] '查找字符串' filename

參數:

-a : 將binary文件以text文件的方式查找數據;

-c : 計算找到’查找字符串‘的次數;

-i : 忽略大小寫的不同;

-n : 帶行號;

-v : 反向選擇,顯示沒有‘查找字符串’的行;

--color=auto : 可以將找到查找的關鍵字部分加上顏色顯示

export | grep -in --color=auto 'bin'
//列出export輸出中帶有bin的行,並給bin加上顏色,不區分大小寫,帶有行號。

 

sort 可以依據不同的數據類型進行排序。

sort [-fbMnrtuk] [file or stdin]

參數:

-f : 忽略大小寫

-b : 忽略最前面的空格符

-M : 以月份的名字來排序,如 JAN, DEC等

-n : 使用“數字”進行排序(默認是以文字類型來排序的)

-r : 反向排序

-u : uniq,相同的數據,僅出現一行代表

-t : 分隔符,默認是[Tab]來分割

-k : 用哪個filed來進行排序,與-t相關

cat /etc/passwd | sort -t ':' -k 3 -n
//根據 passwd中每行,按':'分隔符進行分隔后,按照第3個字段使用純數字的方式進行排序。

 

uniq 重復的行只顯示一個

uniq [-ic]

參數:

-i : 忽略大小寫

-c : 進行計數

last | cut -d ' ' -f1 | sort | uniq -c
//列出登錄者名字,並進行排序,進行統一處理,並計數。

 

wc 輸出信息的整體數據

wc [-lwm]

參數:

-l : 僅列出行

-w : 僅列出多少字(英文單字)

-m : 多少字符

cat /etc/man.config | wc
//輸出三個數字,分表代表行,字數,字符數

 

tee 雙重定向,存到文件/設備的同時,輸出到屏幕以便繼續處理。

tee [-a] file

參數:

[-a] : 以累加(append)的方式,輸出到file中。

ls -l / | tee -a file.list | more
//把文件目錄輸出到file.list中,同時用more將其輸出到屏幕。

 

tr 刪除一段信息中的文字,或者進行文字信息的轉換。

tr [-ds] XXX ...

參數:

-d : 刪除信息中XXX這個字符串

-s : 替換掉重復的字符

last | tr '[a-z]' '[A-Z]'
//將last輸出的信息中所有的小寫字母變成大寫字母

 

col 對特殊字符進行處理

col [-xb]

參數:

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

-b : 在文字內有反斜杠(/)時,僅保留反斜杠最后接的那個字符

cat /etc/man.config | col -x | cat -A | more
//將/etc/man.config內容中的[tab]轉成空白,並輸出。

 

join 將兩個文件當中有相同數據的那一行加在一起。

join [-ti12] file1 file2

參數:

-t : join默認以空格符分隔數據,並且對比“第一個字段”的數據;如果兩個文件相同,則將兩條數據連成一行,且第一個字段放在第一個。

-i : 忽略大小寫

-1 : (數字1),代表第一個文件要用哪個字段進行比較

-2 : 代表第二個文件要用哪個字段進行比較

join -t ':' -1 4 /etc/passwd -2 3 /etc/group
//用分隔符':'進行分隔,第一個文件用第4個字段,第二個文件用第3個字段,進行分析。

 

paste 將兩個文件貼在一起,中間以[tab]鍵隔開。

paste [-d] file1 file2

參數:

-d : 后面可以接分隔符,默認是以[tab]進行分隔

- : 如果file部分寫成-, 表示來自standard input的數據的意思

cat /etc/group|paste /etc/passwd /etc/shadow - |head -n 3
//先將/etc/group讀出,然后與/etc/passwd和/etc/shadow合並的內容粘貼在一起,且僅取出前三行。

 

expand 將[tab]按鍵轉成空格鍵

expand [-t] file

參數:

-t : 后面可以接數字,代表一個tab用幾個空格表示

 

xargs 讀入stdin的數據,並且以空格符或斷行符進行分辨,將stdin的數據分隔為arguments。

xargs [-0epn] command

參數:

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

-e : 是EOF(end of file)的意思,后面可以接一個字符串,當xargs分析到這個字符串時,就停止繼續工作。

-p : 在執行每個命令的參數時,都會詢問用戶的意見

-n : 后面接次數

cut -d ':' -f1 /etc/passwd | xargs -p -e'lp' finger
//分析到lp這個字符串時,后面的其它stdin的內容就被xargs舍棄掉了。

舉個例子

如果你想統計一個文件夾下java代碼的文件數量

find [folderPath] -name "*.java" | wc -l

那如果我想查詢所有java代碼的行數呢?

可以用xargs,因為wc -l filename可以查詢單個文件的行數

find [folerPath] -name "*.java" | xargs wc -l

如果要去掉空行

find [folderPath] -name "*.java" |xargs cat| grep -v ^$|wc -l

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM