• grep命令详解


     

    用法格式

    grep [option] pattern file
     

    实验文件

    [root@zejin240 tmp]# cat testdir/tfile
    1 #include <stdio.h>
    2 void main()
    3 {
    4 int a,b;
    5 a=10;
    6 b=5;
    7 a++;
    8 b=a*2;
    9 printf("Maxnum=%d",a>b?a:b);
    10 }
     
    [root@zejin240 tmp]# cat testdir/tfile1
    Nice to meet you.
    Hello World!
    I like max and min
    when meet a ?,think more.
    and it will become a !
     
     
     

    常用选项

    匹配控制选项

    -E:支持扩展正则表达式,相当于命令egrep
    -F:只匹配固定的字符,相当于命令fgrep
    -e:指定多个匹配模式
    -i:忽略查找字符串及文件名大小写
    -v:反向查找不匹配的行
    -w:查找整个单词,而不一个子串
     
    e.g 1.查找包含有main或Max的行
    [root@zejin240 testdir]# grep -e 'main' -e 'Max' tfile
    2 void main()
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 2.查找包含有b且有Max的行
    [root@zejin240 testdir]# grep 'b' tfile | grep 'Max'
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 3.查找包含max的行,不区分大小写
    [root@zejin240 testdir]# grep -i 'max' tfile
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 4.查找没有=字符的行
    [root@zejin240 testdir]# grep -v '=' tfile
    1 #include <stdio.h>
    2 void main()
    3 {
    4 int a,b;
    7 a++;
    10 }
     
     
     

    输出控制选项

    -c:输出匹配的总行数
    -l:只输出匹配的文件名
    --color:匹配的字符串用颜色显示
    -o:只输出匹配的字符串,而不是所在行
    -q:没有任何输出,有匹配的行返回状态0,适合与判断的时候用
     
     
    e.g 5.查找有=号的行总行数
    [root@zejin240 testdir]# grep -c '=' tfile
    4
     
     

    输出行前缀控制

    -n:在每行前面输出该行在文件中所处的行数
    -H:在每行前加止文件名,在有多个文件时该值是默认打开的
     
    e.g 6.查找=所在的行数
    [root@zejin240 testdir]# grep -n '=' tfile
    5:5 a=10;
    6:6 b=5;
    8:8 b=a*2;
    9:9 printf("Maxnum=%d",a>b?a:b);
     
     

    上下文件输出控制

    -A #:输出匹配行及后面#行
    -B #:输出匹配行及前面#行
    -C #:输出匹配行及前后#行
     
     
    e.g 7.查找包含main的行及其后面2行
    [root@zejin240 testdir]# grep -A 2 'main' tfile
    2 void main()
    3 {
    4 int a,b;
     
    e.g 8.查找包含main的行及其前面2行
    [root@zejin240 testdir]# grep -B 2 'int' tfile
    2 void main()
    3 {
    4 int a,b;
    --
    7 a++;
    8 b=a*2;
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 9.查找含有main的行及其前后1行:
    [root@zejin240 testdir]# grep -C 1 'main' tfile
    1 #include <stdio.h>
    2 void main()
    3 {
     
     

    文件及文件夹控制

    -r:递归查询文件及文件夹下的文件
     
    e.g 10.查找文件夹下所有包含max(不区分大小写)的行
    [root@zejin240 tmp]# ls
    testdir
    [root@zejin240 tmp]# grep -i 'max' * #查找不到,只会在当前文件夹下找
    [root@zejin240 tmp]# grep -i -r 'max' * #正确,会递归入文件中查找
    testdir/tfile:9 printf("Maxnum=%d",a>b?a:b);
    testdir/tfile1:I like max and min
     
     

    注意点

    1.大多数的元字符在中括号中已经失去了他们的特殊意义,就是一个普通的字符而已
    2.在基本的正则表达式中,?, +, {, |, (, 和) 没有特殊的含义,就是一个普通的字符,如果在使用时要让它有正则的含义,则需要加上,如? +
    3.传统的egrep命令并不支持{元字符,有一些egrep用{来实现,为了避免出现疑惑,在grep -E 匹配{时最好用模式[{]
     
    e.g 11.查找包含+和?号的行 (中括号中的加号和问号不需要加反斜线)
    [root@zejin240 testdir]# grep '[+?]' tfile
    7 a++;
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 12.查找包含?号的行
    [root@zejin240 testdir]# grep '?' tfile #直接写问号,不需要反斜线
    9 printf("Maxnum=%d",a>b?a:b);
     
    e.g 13.查找以有a,并且后面接任意一个字母的行
    [root@zejin240 testdir]# grep 'a[a-zA-Z]' tfile
    2 void main()
    9 printf("Maxnum=%d",a>b?a:b);
     
     
     
     
  • 相关阅读:
    WPF应用程序中获取参数
    访问远程oracle数据库时TNS操作超时
    VS2010不能引用System.Data.OracleClient解决方法
    Windows系统下完全卸载Oracle
    创建WPF单实例应用程序
    Winform 版本信息
    SQL Date Time format
    Union合并数组(去掉重复的项目)
    SQL数据类型nchar,char,varchar与nvarchar区别
    Sql语句 生日提醒
  • 原文地址:https://www.cnblogs.com/zejin2008/p/5992620.html
Copyright © 2020-2023  润新知