zoukankan      html  css  js  c++  java
  • Linux命令(八)过滤文本 grep

    grep 命令介绍

    grep是一个强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式。如不指定任何文件名称,或是文件名为 -,则gerp命令从标准输入设备中读取数据。

    grep 家族包括grep egrepfgrep。 egrep 和 fgrep 命令只跟 grep 有很小的不同。 egrep 是 grep 的扩展 , fgrep 就是 fixed grep 或 fast grep,该命令使用任何正则表达式中的元字符表示其自身的字面意义,不在特殊。其中 egrep 就等同于 " grep -E" ,fgrep 等同于"grep -F"。(有点晕。。) Linux中的 grep 功能强大,支持很多参数,可以方便地用来进行文本处理工作。

    grep 命令常用参数说明

    -a	不要忽略二进制数据
    -A 	除了显示符合条件的那一行之外,并显示该列之后的内容
    
    -b	在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号
    -B	除了显示符合条件的那一行之外,并显示该列之前的内容
    
    -c	计算符合结果的行数
    -C	除了显示符合条件的那一行之外,并显示该列之前后的内容
    
    -e 	按指定的字符串查找
    -E	按指定的字符串指定的正则查找
    
    -f	指定范本文件,其内容含有一个或多范本样式	
    -F	将范本样式视为固定的字符串列表
    
    -G	将范本样式视为普通的表示法来用
    
    -h	在显示符合范本样式的那一列之前,不标示该列所属的文件名称
    -H	在显示符合范本样式的那一列之前,标示该列所属的文件名称
    
    -i	忽略字符大小写
    
    -l	列出文件内容符合指定的范本样式的文件名称
    -L	列出文件内容不符合指定的范本央视的文件名称
    
    -n	在显示符合范本样式的那一列之前,标示出该列的列数编号
    
    -q	不显示任何信息
    
    -r	在指定路径中递归查找
    
    -s	不显示错误信息
    
    -v	反向查找
    -V	显示版本信息
    
    -w	匹配整个单词
    
    -x	只显示全列符合的列
    --help	在线帮助
    

    grep 单独使用时至少有两个参数,如少于两个参数,grep 会一直等待,直到该程序被中断。如果遇到这样的情况,可以使用 Ctrl + c 终止。 默认情况下只搜索当前目录,如果递归查找子目录,可使用-r选项。

    grep命令使用方法

    在指定的文件中查找字符串:

    grep root  /etc/passwd    在 /etc/passwd  中查找 root 字符串
    

    结合管道一起使用:

    cat /etc/passwd   | grep root
    
    grep mysql  my.cnf | grep datadir
    

    查找符合条件的内容所在的行号:

    grep -n root /etc/passed
    

    在 nginx.conf 中查找包含 listen 的行号并打印出来:

    grep listen  nginx.conf
    

    查找指定字符串:

    grep uuid  test.txt    区分大小写
    grep UUID  test.txt    区分大小写
    
    grep -i uuid test.txt  不区分大小写
    

    列出匹配字符串的文件名:

    grep -l uuid test.txt
    

    列出不匹配字符串的文件名:

    grep -L uuid test.txt
    

    匹配整个单词:

    gerp -w UU    test.txt
    grep -w UUID   test.txt
    

    除了显示匹配的行,分别显示该行上下文的 n 行:

    grep -C1 UUID test.txt  此处 n = 1 ,跟在 -C 参数后面
    

    按正则表达式查找指定字符串:

    grep -n  -E  "^[a-z]+"   test.txt
    grep -n  -E  "^[^a-z]+"  test.txt
    
    grep  -E   "datadir | socket"  my.cnf
    

    递归查找:

    grep -r var . | head -3
    

    在当前的目录下查找文件中的字符串hello:

    grep  -rn   “hello”    
    

    grep 正则参数说明

    ^	指定匹配字符串的行首
    $	指定匹配字符串的结尾
    *	表示0个以上的字符	
    +	表示1个以上的字符
    	去掉指定字符的特殊含义
    
    ^	指定行的开始
    $	指定行的结束
    .	匹配一个非换行的字符
    *	匹配零个或多个先前字符
    
    []	匹配一个指定范围内的字符
    [^]	匹配一个不在指定范围内的字符
    
    (..)	标记匹配字符
    <	指定单词的开始
    >   指定单词的结束
    
    x{m}	重复字符 x,m 次
    x{m},	重复字符 x, 至少 m 次
    x{m,n}	重复字符x, 至少 m 次,不多于 n 次
    
    w	匹配文字和数字字符,也就是 [A-Za-z0-9]
    b	单词锁定符
    
    +	匹配一个或多个先前的字符
    ?	匹配零个或多个先前的字符
    
    a|b|c	匹配 a 或 b 或 c
    
    ()	分组符号	
    
    [:alnum:]	文字数字字符
    
    [:alpha:]	文字字符
    
    [:digit:]	数字字符
    
    [:graph:]	非空格、控制字符
    
    [:lower:]	小写字符
    
    [:cntrl:]	控制字符
    
    [:print:]	非空字符(包括空格)
    
    [:punct:]	标点符号
    
    [:space:]	所有空白字符(新行,空格,制表符)
    
    [:upper:]	大写字符
    
    [:xdigit:]	十六进制数(0-9,a-f,A-F)
  • 相关阅读:
    省常中模拟 Test4
    省常中模拟 Test3 Day1
    省常中模拟 Test3 Day2
    省常中模拟 Test1 Day1
    树型动态规划练习总结
    noip2010提高组题解
    noip2003提高组题解
    noip2009提高组题解
    noip2004提高组题解
    noip2002提高组题解
  • 原文地址:https://www.cnblogs.com/ay-a/p/8206832.html
Copyright © 2011-2022 走看看