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. 参考资料
GNU Grep 3.8
grep正则表达式