Linux 三剑客之 Grep

Grep 这个命令是一个全局查找正则表达式并且打印结果行的命令。它的输入是一个文件或者是一个标准输入(stdin),或者是一个“-”连字符等。它的输出一般是打印在屏幕上。Grep家族里还有 egrep 和 fgrep 这两个命令,本文不赘述。

1、Grep 命令

1.1 Grep 是如何工作的

Grep 命令在一个或多个文件中查找某个字符模式。如果这个模式中包含空格,就必须用引号把它括起来。Grep 命令中,模式可以是一个被引号括起来的字符串,也可以是单个词,位于模式之后所有的单词都被视为文件名。Grep 将输出发送到屏幕,它不会对输入文件进行任何修改或变化,命令格式如下所示:

grep [选项] 模式 [文件……]

EG 1:

说明:Grep 将在文件中查找 /etc/passwd 中查找模式 Tom。如果查找成功,文件中相应行会显示在屏幕上,如果没有找到指定的模式,就不会有任何输出,如果指定的文件不是一个合法的文件,屏幕上就会显示报错信息。如果发现了要查找的模式,grep 就返回退出状态 0,表示成功,如果没找到,返回的退出状态为1,而找不到指定文件时,退出状态将是2.

Grep的程序输入可以来自标准输入或管道,而不仅仅是文件。如果忘了指定文件,grep 会以为你要它从标准输入(即键盘)获取输入,于是停下来等你键入一些字符。如果输入来自管道,就会有另一条命令的输出通过管道变成 grep 命令的输入,如果匹配到要查找的模式,grep 会把输出打印在屏幕上。

EG 2:

ps 命令的输出被送到 grep,然后所有包含root的行都被打印在屏幕上。

2、正则表达式元字符和选项

2.1 正则表达式元字符

元字符也是一种字符,但它表达的含义不同于字符本身的字面含义。例如,^和$就是元字符。grep 支持很多正则表达式元字符,以便用户更精确的定义要查找模式。具体元字符及其功能一查便知,此处不赘述。

2.2 grep 选项

grep 选项用于调整执行查找或显示结果的方式。例如通过选项来关闭大小写敏感、要求显示行号,或者只显示报错信息等。具体 grep 选项实际使用时查阅,此处不赘述。

3、使用正则表达式 grep 实例

3.1 grep 的测试实例

文中全部例子都使用该 grep.txt文件。

EG 1:

说明:打印文件 grep.txt 文件包含正则表达式 NW 的行。

EG 2:

说明:打印以字母 n 开头的行,(^)行首定位符

EG 3:

说明:打印所有以数字 4 结尾的行。($)行尾定位符

EG 4:

说明:打印所有包含 TB Savage 的行。如果不用引号(这个例子中,使用单引号或双引号都可以),TB 和 Savage 之间的空格将导致 grep 会在 Savage 和 grep.txt 查找 TB。所以,如果字符串之间有空格,必须要用引号引起来。

EG 5:

说明:打印所有包含数字5,后面跟一个 . 号再跟一个任意字符的行。(.)号代表单个字符,被(\)转义后,只代表本身一个 . 号。

EG 6:

说明:打印所有字母 w 和 e 开头的行。[]表示任意一个字符都可以匹配。

EG 7:

说明:打印包含非数字字符的行。由于至少每一行有一个非数字字符,故所有行都被打印。

EG 8:

说明:打印了包含两个大写字符、后跟一个空格和一个大写字符的行,例如 TB Savage 和 MB Main。

EG 9:

说明:打印包含一个 s 、后跟 0 个或多个连着的 s 和一个空格的文本行。

EG 10:

说明:打印所有出现至少 9 个小写字母连在一起的行,例如,northwest,southwest,southeast,northeast。

EG 11:

说明:如果某一行包含一个 3 后面跟一个句点和一个数字,再任意多个字符(.*),则打印该行。

EG 12:

打印所有包含单词 north 的行。“\<” 是词首定位符 “\>” 是词尾定位符。

EG 13:

说明:打印所有包含以小写字母开头,以 n 结尾,中间由任意多个字符组成的单词的行。注意符号 .*,它代表任意字符,包括空格。

3.2 grep 选项测试案例

测试文件同上,EG 14:

说明:选项 -n 在找到指定模式的行前面加上其行号再一并输出。

EG 15:

说明:选项 -i 关闭大小写敏感性。表达式 pat 包含任意大小写的组合都符合。

EG 16:

说明:这个实例中,选项 -v 打印所有不含模式 Suan Chin 的行。选项 -v 可用来删除输入文件中特定的条目。如果真要删除这些条目,就要把 grep 的输出重定向到一个临时文件中,然后把临时文件的名字改成原文件的名字。注意不能从原文件重定向到原文件,这样会破坏原文件的。

EG 17:

说明:选项 -l 使 grep 只输出包含模式的文件名,而不输出文本行。

EG 18:

说明:选项 -c 让 grep 打印出含有模式的行的数目。这个数字并不代表模式的出现次数。例如,即使 west 在某行中出现 3 次,这行也只计一次。

EG 19:

说明:选项 -w 只查找作为一个词,而不是词的一部分出现的模式。这条命令只打印包含词 north 的行,而不打印那些 northwest、northeast等中出现的行。

3.3 grep 与管道

grep 的输入不一定都是文件,它也常常从管道读取输入。

EG 20:

说明:ls 命令的输出通过管道传给 grep。输出结果字母 gr 开头的所有行都被打印出来了,即被选中的目录被打印出来了。

3.4 egrep 扩展

egrep 在 grep 的基础上增加了更多的元字符。但是 egrep 不允许使用 \(\),\{\}.

EG 21:

说明:gerp 不支持 “|” 这个,egrep 支持“|”,egrep 查到了,包含 west 或者 north 的行。

发表评论

电子邮件地址不会被公开。 必填项已用*标注