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 的行。