Linux命令之grep/sort/uniq/cut

grepnode

    -n    顯示行號
    -v    剔除掉過濾內容的那一行後顯示出來
    -w    精確匹配字符串(左右沒有其餘字母)
    -x    整行匹配
    grep "\<root\>"  精確匹配字符串(左右沒有其餘字母)  grep "\brootb>" 
    -i    不區分大小寫
    -c    匹配到的行數
    -E    同時過濾多個字符串grep -E=egrep
    -o   僅顯示匹配regexp的內容(用於統計出如今文中的次數)# grep -o root passwd | wc -l
    -q    靜默模式。匹配到$?返回0,不然返回1
    -B     除了顯示匹配行外,並顯示該行以前的num行 #grep '30' -B 10 file
    -A    除了顯示匹配行外,並顯示該行以後的num行
    -C    除了顯示匹配行外,並顯示該行以前後各num行
          --colour=auto    給匹配到的字符串加顏色
    -a     在二進制文件中,以文本文件的方式搜索數據
    -l     查詢多文件時,只輸出包含匹配字符的文件名
    -H     顯示文件名
    -s    不顯示不存在或者無匹配文本的錯誤信息
    #grep  -E "root|gtms" passwd        grep出包含root或gtms的行
    #grep -E "^(r|R)" file        grep出包含r或R的行
    # grep "^[^210]" file               不是二、1、0開頭的行,括號內的是取反
    #grep "H*P"  file        grep出H在前,P在後的行
    #grep "[5-8][6-9][0-3]"  file
    #grep "4\{2,4\}" file            4出現2到4次的行
    #grep "^$" file | wc -l         空行數
    #grep "\?" file                 包含問號的行
    #grep "^[^d]" file              grep出非d字符開頭的行
    #grep "[0-9]\{1,3\}"\."[0-9]\{1,3\}"\."[0-9]\{1,3\}"\."[0-9]\{1,3\}" file    匹配ip地址
    #egrep "[0-9]{1,3}"\."[0-9]{1,3}"\."[0-9]{1,3}"\."[0-9]{1,3}" file        匹配ip地址


# cat gtms.log
200 gtms
0200 gtmsboy
2000 littlegtms

# grep 200 gtms.log
200 gtms
0200 gtmsboy
2000 littlegtms
# grep \b200\b gtms.log
# grep "\b200\b" gtms.log 需左右沒有字符
200 gtms
# grep "\<200\>" gtms.log   同上
200 gtms
# grep -w "200" gtms.log   效果同上
200 gtms
# grep -x "200" gtms.log 匹配整行,因此沒有

 

cutbash

-d, --delimiter=DELIM        指定分隔符,默認tab
-f, --fields=LIST            指定域,列
-c, --characters=LIST        按字符截取
-b, --bytes           按字節截取
# head -2 /etc/passwd | cut -d: -f5,7    以冒號分割,取5列和7列
root:/bin/bash
bin:/sbin/nologin
# head -2 /etc/passwd | cut -d: -f5-7    以冒號分割,取5至7列
root:/root:/bin/bash
bin:/bin:/sbin/nologin

# head -2 /etc/passwd | cut -c 1-4,5,6    按字符截取,先截取1-4列,再第5列,再第7列
root:x
bin:x:



sortspa

-c    檢查文件是否已經按照順序排序;
-m    將幾個排序好的文件進行合併;
-n    依照數值的大小排序;
-o <file>  將排序後的結果存入制定的文件;
-r    以相反的順序來排序;
-t    指定排序時所用的欄位分隔字符; 
-k    指定列
-u    刪除複製行(只去重相鄰行)
  # sort -u filename      排序去重
  # sort filename | uniq -c  排序後統計
  # sort -nrk 2 -t: filename    以冒號爲分隔,第二列按數字逆排序
  # sort -t: -k1.2 filename     以冒號分隔,按照第一列第二個字符開始排序
  # sort -t: -k1.2 -nrk 3,3 filename  只對第一列第二個字符,而後只對第三個列排序


sort 默認按整行排序。四個重要參數 -n -r -t -k
  -k, --key=POS1[,POS2]
    start a key at POS1 (origin 1), end it at POS2 (default  end  of line)   
  -k 1,1        第一個字段開始排序到第一個字符結束
  -k 1.1,3.3    表示第一個字段的第一個字符開始排序到第三個字段的第三個字符結束

[root@node85 tmp]# cat test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.21 b
192.168.0.65 t
192.168.0.1 n
192.168.0.21 b
192.168.0.100 k
[root@node85 tmp]# uniq test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.65 t
192.168.0.1 n
192.168.0.21 b
192.168.0.100 k
[root@node85 tmp]# sort test.txt | uniq
192.168.0.100 k
192.168.0.123 a
192.168.0.1 n
192.168.0.21 b
192.168.0.65 t
[root@node85 tmp]# sort test.txt | uniq -c
      1 192.168.0.100 k
      1 192.168.0.123 a
      1 192.168.0.1 n
      3 192.168.0.21 b
      1 192.168.0.65 t
[root@node85 tmp]# sort -n test.txt       
192.168.0.100 k
192.168.0.123 a
192.168.0.1 n
192.168.0.21 b
192.168.0.21 b
192.168.0.21 b
192.168.0.65 t
[root@node85 tmp]# sort -t" " -k2 test.txt
192.168.0.123 a
192.168.0.21 b
192.168.0.21 b
192.168.0.21 b
192.168.0.100 k
192.168.0.1 n
192.168.0.65 t

uniqcode

-u     只顯示不重複的行       only print unique lines
-d     只顯示有重複的數據行     only print duplicate lines
-c     打印每行出現次數,要配合sort,而後只是相鄰的才歸類
相關文章
相關標籤/搜索