5. grep

grep(Global search Regular Expression and Print out the line)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

语法格式:

grep [option...] [pattern] [file...]

Note

pattern 中包含正则或者空格等符号时,需要使用引号:’pattern’ 或 “pattern”。

5.1. 常用参数

-c

统计匹配的行数

-o

只打印匹配上的内容,而不是整行;如果一行有多个匹配,则会打印成多行

-i

不区分大小写

-n

显示匹配内容的行号

-r

递归查找目录

-v

反向选择,即打印未匹配上的行

-l

列出文件内容匹配上 pattern 的文件名

-E

扩展 grep,可以使用扩展正则表达式

-V

显示版本信息

-P, --perl-regexp

使用兼容 perl 的正则表达式,与 -E 冲突

--color

匹配到的关键词显示颜色,默认为 auto

--include=file_pattern

只查找匹配 file_pattern 的文件

--exclude=file_pattern

跳过匹配 file_pattern 的文件和目录

Note

grep -E 相当于使用 egrep

--color 选项可能导致输出到控制台的内容为空,但是如果重定向到文件,文件内容不为空。

如果要匹配非打印字符(比如 \t ),可以使用 grep -P ,在 Bash 里面也可以借助 $ (比如 grep $'\tabc\t')。 grep 拿到的是 $ 解析之后的结果, $ 还会将输入的 Unicode 码翻译成对应的符号。

5.2. 基本正则字符

grep 只能使用基本正则字符。

部分常用基本正则字符

字符

含义

.

匹配一个非换行符的字符

*

匹配零个或多个先前字符

^

匹配行的开始

$

匹配行的结束

[…]

匹配一个指定范围内的字符

[^…]

匹配一个不在指定范围内的字符

\<

匹配单词的开始

\>

匹配单词的结束

\w

匹配字母、数字、下划线

[[:digit:]]

匹配数字

[[:alpha:]]

匹配大小写字母

[[:alnum:]]

匹配大小写字母及数字

[[:lower:]]

匹配小写字母

[[:upper:]]

匹配大写字母

基本正则表达式和扩展正则表达式的区别:

  • 在基本正则表达式中, ? + { } | ( ) 只是表示普通字符,除非加上转义符 \ 。比如, \{3,6\} 可以表示匹配个数区间。

  • 在基本正则表达式中,如果 ^ 不是出现在 pattern 开头,也不是紧接 \(\| 之后,那么它只表示一个普通字符。

  • 在基本正则表达式中,如果 $ 不是出现在 pattern 结尾,也不是紧靠 \)\| 之前,那么它只表示一个普通字符。

  • 在基本正则表达式中,如果 * 出现在 pattern 开头,或者紧接 \(^\| 之后,那么它只表示一个普通字符。

Note

[[:lower:]ABC] 可以匹配所有的小写字母以及大写字母A、B、C。

5.3. 参考资料

  1. GNU Grep 3.8

  1. grep正则表达式