跳转至

Grep

#

时间:2017/8/14 20:38:38
参考:

grep 文本查找#

grep(global search regular expression(RE) and print out the line)是一种机强大的文本搜索工具,可以使用正则表达式搜索文本,并把匹配的行打印出来。
搜索文件或者标准输入流(如果没有文件参数,或者参数是 -),输出和正则表达式匹配的行。

语法#

1
grep [options] pattern [file ...]

选项#

  • 正则表达选项

    -E: 扩展表表达式
    -F: 作为字符串
    -G: 作为基础表达式
    -P: Perl正则表达式

  • 输出选项

    -v:输出不匹配的所有行
    -o:只输出匹配的内容
    -c:只输出匹配的行数
    -n:显示行号(匹配的行在文件中的第几行)
    -b:显示匹配的位置前面有多少个字符,相当于偏移量。
    -l:显示有匹配内容的文件的文件名(多文件)。 -i:忽略大小写。
    -r:递归查找。
    -e:多个匹配条件,匹配条件之间是或的关系, 不能和 -P 一起使用。
    -A:显示匹配结果之后的几行
    -B:显示匹配结果之前的几行
    -C:显示匹配结果前后几行

正则表达式#

符合正则表达式语法的正则表达式,简单语法如下:

  • .:代表任意字符
  • *:零次或多次批评日
  • ?:零次或多次匹配
  • +:一次或多次匹配
  • ^:匹配行头
  • $:匹配行尾
  • \w:字符 [0-9a-zA-Z]
  • \w:非字符 [!0-9a-zA-Z]
  • \s:匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
  • \d:数字
  • \D:非数字

文件#

文件,或文件列表,或者是空,或者是 -

例子#

  1. 查找文件中包含 sla 的行, a 可有可无,也可以是多个。
    1
    grep -P "sla*" redis.conf
    
    1. 匹配行头是 a,行尾是 b 的行。

      grep -P "^a.*b$" redis.conf 3. 显示包含匹配行的文件名。

      grep -l "^A" redis.conf data.txt 4. 递归找出当前目录下的文件,有以 a 开头的行的文件。

      grep -rl "^a" ./ 5. 多个匹配条件,找出以 a 开头或者以 s 结尾的行。

      grep -e "^a" -e "s$" redis.conf
      6. 包含以 .txt 结尾的文件,或者包含以 .txt.war 结尾的文件。

      grep "^a" ./ -rl --include=.txt grep "^a" ./ -rl --include=.{txt,war} 7. 显示匹配结果前面的两行和后面的三行。

      grep -P -B 2 -A 3 "^a" redis.conf 8. 多文件查找

      grep "a" A.txt B.txt 9. 查找空行

      grep -n "^$" log.txt