天天學點Linux-選取命令CUT和GREP

  選取命令就是將一段數據通過分析後,取出咱們所想要的。或者是經由分析關鍵詞,取得咱們所想要的那一行!通常來講,選取命令一般是針對一行一行的數據來進行分析的, 並非整篇信息分析。
cut
  cut命令能夠將一段信息的某一段選取出來,信息處理一行爲單位。CUT命令使用格式以下:apache

[root@www ~]# cut -d'分隔字符' -f fields <==用於有特定分隔字符
[root@www ~]# cut -c 字符區間            <==用於排列整齊的信息
選項與參數:
-d  :後面接分隔字符。與 -f 一塊兒使用;
-f  :依據 -d 的分隔字符將一段信息分割成爲數段,用 -f 取出第幾段的意思;
-c  :以字符 (characters) 的單位取出固定字符區間;

  範例一:將 PATH 變量取出,我要找出第五個路徑。bash

[root@www ~]# echo $PATH | cut -d ':' -f 5
# 如同上面的數字顯示,咱們是以『 : 』做爲分隔,所以會出現 /usr/local/bin
# 那麼若是想要列出第 3 與第 5 呢?,就是這樣:
[root@www ~]# echo $PATH | cut -d ':' -f 3,5

   範例二:將 export 輸出的信息,取得第 12 字符之後的全部字符串字體

[root@www ~]# export
declare -x HISTSIZE="1000"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x LANG="zh_TW.big5"
.....(其餘省略).....
# 注意看,每一個數據都是排列整齊的輸出!若是咱們不想要『 declare -x 』時,
# 就得這麼作:

[root@www ~]# export | cut -c 12-
HISTSIZE="1000"
INPUTRC="/etc/inputrc"
KDEDIR="/usr"
LANG="zh_TW.big5"

   CUT -d命令適合操做具備固定分割符的文本,用 -c 能夠處理比較具備格式的輸出數據,還能夠指定某個範圍的值,例如第 12-20 的字符,就是 cut -c 12-20。cut 主要的用途在於將『同一行裏面的數據進行分解!』最常使用在分析一些數據或文字數據的時候! 這是由於有時候咱們會以某些字符看成分割的參數,而後來將數據加以切割,以取得咱們所須要的數據。 鳥哥也很常使用這個功能呢!尤爲是在分析 log 文件的時候!不過,cut 在處理多空格相連的數據時,可能會比較吃力一點。編碼

grepspa

   cut是將一行信息當中,取出某部分咱們想要的,而grep則是分析一行信息, 若當中有咱們所須要的信息,就將該行拿出來。其使用方法以下:blog

[root@www ~]# grep [-acinv] [--color=auto] '搜尋字符串' filename
選項與參數:
-a :將 binary 文件以 text 文件的方式搜尋數據
-c :計算找到 '搜尋字符串' 的次數
-i :忽略大小寫的不一樣,因此大小寫視爲相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 '搜尋字符串' 內容的那一行!
--color=auto :能夠將找到的關鍵詞部分加上顏色的顯示喔!

  具體的操做實例以下:排序

範例一:將 last 當中,有出現 root 的那一行就取出來;
[root@www ~]# last | grep 'root'

範例二:與範例一相反,只要沒有 root 的就取出!
[root@www ~]# last | grep -v 'root'

範例三:在 last 的輸出信息中,只要有 root 就取出,而且僅取第一欄
[root@www ~]# last | grep 'root' |cut -d ' ' -f1
# 在取出 root 以後,利用上個命令 cut 的處理,就可以僅取得第一欄囉!

範例四:取出 /etc/man.config 內含 MANPATH 的那幾行
[root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
....(前面省略)....
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/bin/mh             /usr/share/man

排序命令: sort, wc, uniqci

  sort命令能夠進行排序,並且能夠依據不一樣的數據型態來排序,排序的字符與語系的編碼有關。字符串

[root@www ~]# sort [-fbMnrtuk] [file or stdin]
選項與參數:
-f  :忽略大小寫的差別,例如 A 與 a 視爲編碼相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『純數字』進行排序(默認是以文字型態來排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的數據中,僅出現一行表明;
-t  :分隔符,默認是用 [tab] 鍵來分隔;
-k  :以那個區間 (field) 來進行排序的意思

   範例一:我的帳號都記錄在 /etc/passwd 下,請將帳號進行排序。input

[root@www ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

  範例二:/etc/passwd 內容是以 : 來分隔的,我想以第三欄來排序,該如何?

[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
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

   看到特殊字體的輸出部分了吧?怎麼會這樣排列啊?若是是以文字型態來排序的話,本來就會是這樣,想要使用數字排序,使用-n來以數字來排序。

# cat /etc/passwd | sort -t ':' -k 3 -n

uniq
  uniq命令能夠用來去除重複的數據,僅僅保留一行,其使用方法以下:

[root@www ~]# uniq [-ic]
選項與參數:
-i  :忽略大小寫字符的不一樣;
-c  :進行計數

   範例一:使用 last 將帳號列出,僅取出帳號欄,進行排序後僅取出一位;

[root@www ~]# last | cut -d ' ' -f1 | sort | uniq

  範例二:承上題,若是我還想要知道每一個人的登錄總次數呢?

[root@www ~]# last | cut -d ' ' -f1 | sort | uniq -c
      1
     12 reboot
     41 root
      1 wtmp

  UNIQ這個命令用來將重複的行刪除掉只顯示一個,舉個例子來講, 你要知道這個月份登錄你主機的用戶有誰,而不在意他的登錄次數,那麼就使用上面的範例, (1)先將全部的數據列出;(2)再將人名獨立出來;(3)通過排序;(4)只顯示一個! 因爲這個命令是在將重複的東西減小,因此固然須要『配合排序過的文件』來處理囉!
wc
  若是想要知道文件裏面有多少字?多少行?多少字符的話能夠利用 wc 這個命令來達成,WC能夠幫咱們計算輸出的信息的總體數據。其使用方法以下:

[root@www ~]# wc [-lwm]
選項與參數:
-l  :僅列出行;
-w  :僅列出多少字(英文單字);
-m  :多少字符;

   範例一:那個 /etc/man.config 裏面到底有多少相關字、行、字符數?

[root@www ~]# cat /etc/man.config | wc
    141     722    4617

   輸出的三個數字中,分別表明: 行、字數、字符數

相關文章
相關標籤/搜索