- 管道命令"|"僅能處理經由前面一個命令傳來的正確信息,也就是standard output的信息,對於standard error 並沒有直接處理的能力。
[root@www~]# ls -al /etc | less <==想要查看/etc下面的文件,但是同時進行分頁顯示
- 選取命令 cut 和 grep
- cut
選取信息通常針對"行"來分析的,並不是整篇信息分析。參數 含義 -d 後面接分隔字符,與-f一起使用 -f 依據-d的分隔符將一段信息切割成數段,用-f去取出第幾段的意思 -c 以字符的單位取出固定字符區間 [root@www~]# echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games: [root@www~]# echo $PATH | cut -d ':' -f 5 #則上面的意思是,在PATH的結果裏面取出以:分隔的第5段 [root@www~]# echo $PATH | cut -d ':' -f 3,5 #則上面的意思是,在PATH的結果裏面取出以:分隔的第3段和第5段
[root@www~]#export declare -x HISTSIZE=“1000” declare -x INPUTRC ="/etc/inputrc" declare -x KDEDIR=“/usr” (......省略......) #因爲數據排列是整齊的,所以可以直接直接取12個字符後面的字,如果想要取12個字符到20個字符,那麼就可以用 cut -c 12-20 [root@www~]#export | cut -c 12- HISTSIZE=“1000” INPUTRC ="/etc/inputrc" KDEDIR=“/usr”
- grep
cut是在一行信息當中取出部分我們想要的,而grep就是分析一行信息,若當中有我們需要的信息,就將該行拿出來。參數 含義 -a 將binary文件以text文件的方式查找數據 -c 計算找到"查找字符串"的次數 -i 忽略大小寫的不同 -n 輸出行號 -v 反向選擇,即顯示出沒有"查找字符串"內容那一行 –color=auto 可以將找到的關鍵字部分加上顏色顯示
- cut
- 排序命令 sort ,wc,uniq
- sort
sort進行排序,依據不同的數據類型就行排序,文字與數字的排序就不一樣。排序的字符與語系編碼有關,所以在使用sort之前,可以先使用LANG=Cl來讓語系統一。參數 含義 -f 忽略大小寫的差異。例如A與a視爲編碼相同 -b 忽略最前面的空格符 -M 以月份的名字來排序 -n 使用"純數字"進行排序 -r 反向排序 -u 就是unique,相同的數據,僅出現一行 -t 分隔符,默認用tab來分隔 -k 以那個區間(field)進行排序的意思 [root@www~]# cat /etc/passwd | sort -t ':' -k 3 root:x:0:0:root:/root:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operatorx:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin <==按照以:分隔的第三列進行進行排序,又因爲是按照第一位進行排序的,所以所有0數字開頭的排在前面,1的排在後面 <==如果想要按照第三列的數字大小排序,就用如下命令 [root@www~]# cat /etc/passwd | sort -t ':' -k 3 -n
- wc
參數 含義 -l 僅列出行 -w 僅列出多少字 -m 多少字 [root@www~]# cat /etc/man.config | wc 141 722 4617 <==這個命令代表查出,/etc/man.config裏面究竟有多少行、字數、字符數
- uniq
參數 含義 -i 忽略大小寫字符的不同 -c 進行計數 [root@www~]# last | cut -d ' ' -f 1 | sort | uniq -c 1 12 reboot 41 root 1 wtmp <==從上面可以看出,reboot有12次,wtmp與第一行的空行是last默認字符。
- sort
- 雙向重定向 tee
參數 含義 -a 以累加的方式,將數據加入file中 [root@www~]# last | tee last.list | cut -d " " -f 1 <==這個命令可以把last命令的結果存一份到last.list文件中,同時屏幕中也會有經過cut -d " " -f 1的結果
- 字符轉換命令 tr col join paste expand
- tr
tr可以用來刪除一段信息當中的文字或者進行文字信息的替換。這個命令也可以用正則表達式的方式替換數據。參數 含義 -d 刪除信息當中的SET1字符串 -s 替換掉重複字符串 [root@www~]# last| tr '[a-z]' '[A-Z]' <==將last輸出信息中所有小寫字符變成大寫字符 [root@www~]# cat /etc/passwd | tr -d ':' <==將/etc/passwd中輸出信息的冒號刪除
- col
參數 含義 -x 將tab鍵轉換爲對等的空格鍵 -b 在文字內有反斜槓時,僅保留反斜槓最後接的那個字符 [root@www~]# cat -A /etc/man.config <==用這個命令查看的時候會看到很多^ [root@www~]# cat /etc/man.config | col -x | cat -A | more <==把tab鍵替換爲空格鍵,輸出美觀
- join
join用來處理兩個文件之間的數據,要將兩個文件當中有相同數據那一行加在一起。參數 含義 -t join默認以空格符分隔數據,並且對比第一個字段數據,如果兩個文件相同,則將兩條數據連城一行,且第一個字段放在第一個 -i 忽略大小寫的差異 -1 代表第一個文件要用哪個字段來分析 -2 代表第二個文件要用哪個字段來分析
注意:在進行合併之前,所處理的文件需要經過排序sort,否則有些對比項會被略過。[root@www~]# head -n 3 /etc/passwd /etc/shadow ==>/etc/passwd<== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ==>/etc/shadow<== root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:*:14126:0:99999:7::: daemon:*:14126:0:99999:7::: #因爲兩個內容都是以用戶名開頭的,且以:爲分隔 [root@www~]# join -t ':' /etc/passwd /etc/shadow root:x:0:0:root:/root:/bin/bash:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:x:1:1:bin:/bin:/sbin/nologin:*:14126:0:99999:7::: daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:14126:0:99999:7::: <==則通過join,我們把用戶名相同的都整合爲同一行
- paste
paste就是把兩行貼在一起,中間以tab鍵隔開。參數 含義 -d 後面可以接分隔符,默認以tab來分隔 - 如果file部分寫成-,表示來自standard input 的數據的意思 [root@www~]# paste /etc/passwd /etc/shadow root:x:0:0:root:/root:/bin/bash root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7::: bin:x:1:1:bin:/bin:/sbin/nologin bin:*:14126:0:99999:7::: daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:14126:0:99999:7:::
- tr
- split切割命令
split可以將大文件依據文件大小或行數來切割稱爲小文件。參數 含義 -b 後面可接欲切割成的文件大小,可加單位b,k,m等 -l 以行數進行切割 PREFIX 代表前導符,可作爲切割文件的前導文字 [root@www~]# cd /temp;split -b 300k /etc/termcap termcap [root@www~temp]# ll -k termcap* -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapaa -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapab -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapac #因爲我們的前導符是XXX,所以生成的文件就會以XXXaa,XXXab,XXXac
[root@www~]# cat termcap* >> termcapback <==把上面例子的三個文件用數據流重定向定向到同一個文件 [root@www~]# ls -al / | split -l 10 - lsroot <==查看/下面的文件,並且按照每10行進行分割 [root@www~]# wc -l lsroot* 10 lsrootaa 10 lsroot1b 6 lsrootac 26 total #重點在-,一般來說,如果需要stdout/stdin,但是沒有文件,只有-,那麼-就會被當成stdout或stdin
- 參數代換xargs
xargs可以讀入stdin數據,並且以空格符或者斷字符進行分辨,將stdin分隔成arguments。參數 含義 -0 如果輸入的stdin含有特殊字符,例如 ,`, -e 是EOF的意思,後面接字符串,當xargs分析到這個字符串時,就會停止工作 -p 在執行每個命令的參數時,都會詢問用戶的意思 -n 後面接次數,每次command命令執行的時候,要使用幾個參數的意思 [root@www~]# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger Login:root Name:root Directory:/root Shell:/bin/bash Never logged in. No mail No Plan <==finger accout 可以取得該賬號的相關說明內容,例如上面的輸出就是finger root後的結果。例子中,我們利用cut取出賬號名稱,用head取出三個賬號,最後用xargs將三個賬號名稱變成finger需要的參數
- 關於減號-的用途
某些命令需要用到文件名來進行處理,該stdin與stdout可以利用減號’-'裏替代。[root@www~]# tar -cvf - /home | tar -xvf - #例子中,我們將/home裏面的打包文件打包,但打包的數據不是記錄到文件,而是傳送到stdout,經過管道,將tar -cvf - /home 傳送到後面的tar -xvf -。後面的這個-則取用前一個命令的stdout。
管道
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.