Linux命令之grep/sort/uniq/cut


grep

    -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               不是2、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 匹配整行,所以没有

 

cut

-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:



sort

-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

uniq

-u     只显示不重复的行       only print unique lines
-d     只显示有重复的数据行     only print duplicate lines
-c     打印每行出现次数,要配合sort,然后只是相邻的才归类

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM