在Linux里面开发的时候,经常会使用到grep工具来做事。
grep(Global Regular Expression Print)全局正则表达式打印。本文主要去翻译man grep。
命令的格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
一共有3个部分:
选项,正则表达式,需要匹配的文件列表。
描述(DESCRIPTION)
grep会使用[PATTERN]去到[FILE](或者是标准输出,或者单个[-]作为文件名)将匹配的行打印到屏幕。
此外,还有两个变种的程序:egrep,fgrep。egrep等价于grep -E。fgrep等价于grep -F。不推荐直接使用egrep或者fgrep,但是提供给比较老的应用在不修改的前提下能正常的运行。
选项
普通程序信息
–help
帮助文件
-V –version
输出版本信息
匹配器选择
此选项是用来指定当前正则表达式的标准
-E, –extended-regexp
extended regular expression标准
-F, –fixed-strings
a list of fixed strings,使用新行来做分割,任何的字串都能能被当成正则来做匹配。
-G, –basic-regexp
basic regular expression
-P, –perl-regexp
a Perl regular expression。这是高度实验性而且grep -P可能会出现很多未实现的警告。
匹配控制
-e PATTERN, –regexp=PATTERN
让[PATTERN]作为匹配。这个也能用于多条件匹配时,或者去保护用-开头的模式。
-f FILE, –file=FILE
指定文件。
-i, –ignore-case
忽略大小写
-v, –invert-match
匹配取反。
-w, –word-regexp
只选取全字匹配的行。
-x, –line-regexp
只选取精准匹配整行的行。
-y
兼容旧版本,和-i的意义相同
一般输出控制
-c, –count
取消掉普通输出;取而代之的是打印在文件中找到的匹配行数。
–color[=WHEN], –colour[=WHEN]
颜色方式输出。
-L, –files-without-match
取消掉普通输出;取而代之的将会打印输入的文件中没有匹配到的文件名
-l, –files-with-matches
取消掉普通输出;取而代之的将会打印输入的文件中匹配到的文件名
-m NUM, –max-count=NUM
最大匹配次数。
-o, –only-matching
只显示匹配字符串;
-q, –quiet, –silent
静默状态运行;不会在标准输出中打印任何内容。如果发现匹配,一个错误被发现的时候,将立即返回0。
输出行前缀控制
-b, –byte-offset
输出匹配位置字节偏移
-H, –with-filename
输出文件名
-h, –no-filename
隐藏文件名
–label=LABEL
添加label
-n, –line-number
显示行号
-T, –initial-tab
输出时添加tab做对齐。
-u, –unix-byte-offsets
使用unix风格的字节偏移。在配合-b来使用。
-Z, –null
输出时,文件名后面缀的:将会去掉。
上下行控制
-A NUM, –after-context=NUM
打印后面[NUM]行
-B NUM, –before-context=NUM
打印前面[NUM]行
-C NUM, -NUM, –context=NUM
前后[NUM]行
–group-separator=SEP
定制上下文组的分隔符
–no-group-separator
取消上下文组分隔符
文件和目录选择
-a, –text
将二进制文件当成文本方式来匹配,等同于–binary-files=text
–binary-files=TYPE
如果文件开始部分的字节标示了文件存在二进制数据,将会采取[TYPE]方式来处理此文件。可选项有:[binary,without-match,text]
-D ACTION, –devices=ACTION
当输入的文件是一个设备,FIFO或者是socket的时候使用他。
-d ACTION, –directories=ACTION
如果输入的是一个文件目录的时候使用这个选项有:[skip,recurse]两个。当使用recurse就相当于-r
–exclude=GLOB
排除掉一些文件名能匹配上[GLOB]的。通配符号有: *, ?, and […],\作为转移。
–exclude-from=FILE
排除指定的文件
–exclude-dir=DIR
忽略掉目录
-I
等同–binary-files=without-match。忽略掉binary格式的文件匹配操作。
–include=GLOB
抓起文件名和[GLOB]匹配的文件,进行匹配
-r, –recursive
递归的扫描目录下全部的文件。等同于-d recurse
-R, –dereference-recursive
等同于-r
其他选项
–line-buffered
在输出上使用行缓冲。这将会导致性能损失。
-U, –binary
将文件按照binary方式对待。
-z, –null-data
按照0byte为一组数据,而不是使用新行方式来作为匹配分组数据。
正则表达式
本文就略去了,基本上和之前看到过的正则一样。
环境变量
grep操作行为还受到下面的环境变量的影响。
GREP_OPTIONS
可以隐形的配置grep的选项,比如“–binary-files=without-match –directories=skip”。当grep在运行的时候,都将会把这些选项加入。
GREP_COLORS
定制在匹配之后颜色的方案。这块的东西非常杂:
默认值:
ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36
退出状态
通常情况下返回0就是查找到内容了,反之为1。当错误发生时返回2,除非是在-q或者-quiet或者–silent选项被用上时,并且找到了行。