管道命令——|
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