A-A+

grep命令

2016年11月09日 linux 暂无评论 阅读 305 views 次

1.1.Grep 命令
1.1.1.Grep 命令的介绍
grep 这个命令是一个全局查找正则表达式并且打印结果行的命令。它的输入是一个文 件或者是一个标准输入(stdin),或者是一个“-”连字符(),????待查阅后解释。它的输出一般 是打印在里屏幕上。

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

命令格式 grep [选项] 模式 [文件....]

案例 1:

说明

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

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

案例 2:

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

1.2.正则表达式元字符和选项
1.2.1.正则表达式元字符
元字符也是一种字符,但他表达的含义不同于字符本身的字面含义。例如,^和$就是元字符。grep 支持很多            正则表达式元字符,以便用户更精确的定义要查找模式。
正则表达式元字符

元字符 功   能 示   例 示例的匹配对象
^ 行首定位符 /^love/ 匹配所有以 love 开头的行
$ 行尾定位符 /love$/ 匹配所有以 love 结尾的行
. 匹配除换行外的单个字符 /l..e/ 匹配包含字符 l、后跟两个任意字符、再跟字母 e 的行
* 匹配零个或多个前导字符 /*love/ 匹配在零个或多个空格紧跟着模式 love 的行
[] 匹配指定字符组内任一字符 /[Ll]ove/ 匹配包含 love 和 Love 的行
[^] 匹配不在指定字符组内任一字符 /[^A-KM-Z]ove/ 匹配包含 ove,但 ove 之前的那个字符不在 A 至 K 或 M 至 Z 间的行
\(..\) 保存已匹配的字符    
& 保存查找串以便在替换串中引用 s/love/**&**/ 符号&代表查找串。字符串 love 将替换前后各加了两个**的引用,即 love 变成**love**
\< 词首定位符 /\<love/ 匹配包含以 love 开头的单词的行
\> 词尾定位符 /love\>/ 匹配包含以 love 结尾的单词的行
x\{m\} 连续 m 个 x /o\{5\}/ 分别匹配出现连续 5 个字母 o、至少 5 个连续的 o、或 5~10 个连续的 o 的行
x\{m,\} 至少 m 个 x /o\{5,\}/
x\{m,n\} 至少 m 个 x,但不超过 n 个 x /o\{5,10\}/

1.2.2.grep 选项

1.2.2.grep 选项

grep 选线用于调整执行查找或显示结果的方式。例如通过选线来关闭大小写敏感、要求显示行号,或者只显示报错信息等。

表 1.2.2.grep 选项

选  项 功    能
-E 如果加这个选项,那么后面的匹配模式就是扩展的正则表达式,也就是 grep -E

= egrep

-i 比较字符时忽略大小写区别
-w 把表达式作为词来查找,相当于正则中的"\<...\>"(...表示你自定义的规则)
-x 被匹配到的内容,正好是整个行,相当于正则"^...$"
-v 取反,也就是输出我们定义模式相反的内容
-c count.统计,统计匹配结果的行数,主要不是匹配结果的次数,是行数。
-m 只匹配规定的行数,之后的内容就不在匹配了
-n 在输出的结果里显示行号,这里要清楚的是这里所谓的行号是该行内容在原文件中的行号,而不是在输出结果中行号
-o 只显示匹配内容,grep 默认是显示满足匹配条件的一行,加上这个参数就只显示匹配结果,比如我们要匹配一个 ip 地址,就只需要结果,而不需要该行的内容。
-R 递归匹配。如果要在一个目录中多个文件或目录匹配内容,则需要这个参数
-B 输出满足条件行的前几行,比如 grep -B 3 "aa" file 表示在 file 中输出有 aa 的行,同时还要输出 aa 的前 3 行
-A 这个与-B 类似,输出满足条件行的后几行
-C 这个相当于同时用-B -A,也就是前后都输出
   
   
 

 

3.3.使用正则表达式 grep 实例

3.3.1.grep 的测试实例

以下所有的例子都是用的 test_1.txt 文件。

 

案例1:打印NW的行

 

案例2:打印以n开头的行

案例3:打印所有以3结尾的行

案例4:打印所有包含‘TB Savage'的行

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

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

案例6:打印所有字母 w 和 e 开头的行。[]表示任意一个字符都可

案例7: 打印包含非数字字符的行。由于至少每一行有一个非数字字符,因此说有行都被打印。

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

Main。

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

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

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

案例12:

打印所有包含以小写字母开头,以 n 结尾,中间由任意多个字符组成的单词的行。注意

符号.*,它代表任意字符,包括空格

案例13:选项-n 在找到指定模式的行前面加上其行号再一并

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

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

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

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

标签:

给我留言

Copyright © 一路向北的博客 保留所有权利.   Theme  Ality

用户登录