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 选项。或者使用\<, \>表示单词边界。

posted @ 2020-09-21 18:21  DDKK64  阅读(192)  评论(0编辑  收藏  举报