Linux grep
最后修改:2020/11/8
简介
grep
能够在每个文件中寻找匹配的模式(pattern)。
基本格式
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]
文件列表中,使用 - 表示标准输入。建议使用/dev/fd/0或者/dev/stdin。
命令行选项
模式语法的选择
-
-G
将模式当成POSIX BRE(Basic Regex Expression)正则表达式。grep
默认使用此选项。 -
-E
可以使用POSIX ERE(Extended Regex Expression)语法。
grep -E
等价于egrep
更多关于POSIX BRE和ERE的内容:POSIX BRE&ERE
-
-F
将模式当成一般字符串 -
-P
使用pearl正则语法。
匹配控制选项
man
-
-i
模式大小写不敏感地匹配 -
-v
选择不匹配的行 -
-w
之匹配含有满足模式的词的行。等价于在模式前后分别加上\b
。
输出控制
-
-c
输出每个输入文件中匹配行的数量 -
-L
输出不含有匹配的文件名。 -
-l
输出含有匹配的文件名。 -
-o
仅输出匹配行中匹配的部分,不输出整行。
输出行前缀控制选项
-
-H
输出文件名。当输出多个文件时默认。 -
-h
不要输出文件名。当目标为单个文件时默认。 -
-n
标记匹配所在行号,从1算起。
输出行上下文控制
-
-A n
输出匹配行之后的n行。 -
-B n
输出匹配行之前的n行。 -
-C n
输出匹配行及前后各n行。
文件和目录选择
-
-r
递归读取每个目录中的所有文件,不跟踪symbolic link。 -
-R
递归读取每个目录中的所有文件,跟踪symbolic link。
一些实例
1). 寻找某个文件中的单词及其行号:
grep -n "word" filename
2). 递归输出某个目录及其子目录下含有某个模式的文件名
grep -rl "word" directory
如果想进一步对文件后缀(类型)做一些限制:
grep -rl "word" directory | grep “.*\.c” -
3). 输出(多个)文件中模式的匹配次数
grep -r -c "word" directory
另外,统计目录下个文件的行数可以使用
grep -rc "^"
4). 匹配整个单词
加 -w
选项。或者使用\<
, \>
表示单词边界。