Linux 命令 - grep

Lastest updated on February 1, 2018

基本

grep [option] pattern file

参数

[N] 表示数字

参数 含义
-A [N] –after-context=[N] 多显示符合条件的 后 几行
-B [N] –before-context=[N] 多显示符合条件的 前 几行
-c –count 显示计算符合模式的行数。
-C [N] –context=[nN] -[N] 多显示该行之前后的内容。
-d [recurse | read | skip] 查找的是文件夹而非文件时的操作,recurse 递归全部文件
-e 指定模式,可以保护容易与参数混淆的模式,如 grep -e -e file
-E 使用拓展的模式 egrep
-f [文件名] 指定模式文件,适合有多个模式时
-h –no-filename 不显示文件名
-H –with-filename 显示文件名(默认显示)
-i –ignore-case 忽略大小写
-l –file-with-matches 显示符合模式的文件的名称
-L –files-without-match 显示不符合模式的文件的名称
-n –line-number 显示行号
-q –quiet –silent 不显示任何结果(根据返回的状态判断结果)
-r –recursive 同 -d recurse
-s –no-messages 不显示错误信息。
-v –revert-match 显示不符合模式的所有行的内容
-V –version 显示版本
-w –word-regexp 仅选择能精确匹配整个单词的行
-x –line-regexp 仅选择能精确匹配整行内容的行
-y 同 -i 忽略大小写

中文翻译 man 相关部分,链接 英文就直接 man grep 吧

模式

建议用引号包裹

表达式 含义(要搜索前四个符号都要加斜杠,. 就要\.
^ 开始
$ 结束
. 任意一个非换行字符
* 前一个字符表达的意思的一个或多个
.* 任意字符
[] 范围内
[^] 范围外
\w 大小写字母和数字 = [A-Za-z0-9]中文也行
\W 非字母数字,[^A-Za-z0-9]
\b 锁定,出现在前就前面不允许出现其他内容,前后都有等同与-w
\< 锁定单词的开始,同\b,与其混用会错
\> 锁定单词的结束,同\b,与其混用会错
x\{m\} x 出现正好 m 次
x\{m,\} x 出现至少 m 次
x\{m,n\} x 出现 m~n 次
表达式(模式串整体要多加一层[]) 含义
[:alnum:] 文字数字
[:alpha:] 文字
[:digit:] 数字
[:xdigit:] 十六进制数字(0-9,a-f,A-F)
[:graph:] 非空字符(非空格、控制字符)
[:lower:] 小写字符
[:upper:] 大写字符
[:cntrl:] 控制字符\t 之类的
[:print:] 非空字符(包括空格等可以打印出来的)
[:punct:] 标点符号
[:space:] 所有空白字符(新行,空格,制表符)

egrep

拓展了模式串表达的 grep

参数 含义
+ 匹配一个或者多个先前的字符
? 匹配0个或者多个先前字符.
a|b|c 匹配a或b或c
() 字符组, 如: a(t
(..)(..)\1\2 模板匹配. \1代表前面第一个模板, \2代第二个括弧里面的模板.
x{m,n} =x\{m,n\}