大家好,欢迎来到IT知识分享网。
前言
Grep 命令的介绍
grep 这个命令是一个全局查找正则表达式并且打印结果行的命令。它的输入是一个文件或者是一个标准输入(stdin),或者是一个“-”连字符(),???待查阅后解释。它的输出一般是打印在屏幕上。grep 家族里还有 egrep 和 fgrep 这两个命令,
Grep 是如何工作的
grep命令在一个或多个文件中查找某个字符模式。如果这个模式中包含空格,就必须用引号把它括起来。grep命令中,模式可以是一个被引号括括起来的字符串,也可以是单个词,位于模式之后所有的单词都被视为文件名。grep将输出发送到屏幕,它不会对输入文件进行任何修改或变化,下面我们以一个命令来说明。
命令格式
grep [选项] 模式 [文件....]
案例 1:
[root@Practice_Server ~]# grep root /etc/passwd``root:x:0:0:root:/root:/bin/bash``operator:x:11:0:operator:/root:/sbin/nologin
说明
grep 将在文件中查找/etc/passwd 中查找模式 Tom。如果查找成功,文件中相应行会显示在屏幕上,如果没有找到指定的模式,就不会有任何输出,如果指定的文件不是一个合法的文件,屏幕上就会显示报错信息。如果发现了要查找的模式,grep 就返回退出状态 0,表示成功,如果没找到,返回的退出状态为 1,而找不到指定文件时,退出状态将是 2。
grep 的程序输入可以来自标准输入或管道,而不仅仅是文件。如果忘了指定文件,grep会以为你要它从标准输入(即键盘)获取输入,于是停下来等你键入一些字符。如果输入来自管道,就会有另一条命令的输出通过管道变成 grep 命令的输入,如果匹配到要查找的模式,grep 会把输出打印在屏幕上。
案例 2:
[root@Practice_Server ~]# ps -ef | grep root
ps 命令的输出被送到 grep,然后所有包含 root 的行都被打印在屏幕上。
正则表达式元字符和选项
元字符也是一种字符,但他表达的含义不同于字符本身的字面含义。例如,^和$就是元字符。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\}/ |
grep 选项
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 行 |
| -B |
这个与-B 类似,输出满足条件行的后几行 |
| -C |
这个相当于同时用-B -A,也就是前后都输出 |
使用正则表达式 grep 实例
[root@Practice_Server ~]# cat grep.txt` `northwest NW Charles Main 3.0 .98 3 34``western WE Sharon Gray 5.3 .97 5 23``southwest SW Lewis Dalsass 2.7 .8 2 18``southern SO Suan Chin 5.1 .95 4 15``southeast SE Patricia Hemenway 4.0 .7 4 17``eastern EA TB Savage 4.4 .84 5 20``northeast NE AM Main Jr. 5.1 .94 3 13``north NO Margot Weber 4.5 .89 5 9``central CT Ann Stephens 5.7 .94 5 13
案例 1:
[root@Practice_Server ~]# grep NW grep.txt``northwest NW Charles Main 3.0 .98 3 34
说明:
打印文件 grep.txt 文件包含正则表达式 NW 的行
案例 2:
[root@Practice_Server ~]# grep ^n grep.txt``northwest NW Charles Main 3.0 .98 3 34``northeast NE AM Main Jr. 5.1 .94 3 13``north NO Margot Weber 4.5 .89 5 9
说明:
打印以字母 n 开头的行,(^)行首定位符
案例 3:
[root@Practice_Server ~]# grep "4$" grep.txt``northwest NW Charles Main 3.0 .98 3 34
说明:
打印所有以数字 4 结尾的行。($)行尾定位符
案例 4:
[root@Practice_Server ~]# grep 'TB Savage' grep.txt``eastern EA TB Savage 4.4 .84 5 20
说明:
打印所有包含 TB Savage 的行。如果不用引号(这个例子中,使用单引号或双引号都可以),TB 和 Savage 之间的空格将导致 grep 会在 Savage 和 grep.txt 查找 TB。所以,如果字符串之间有空格,必须要用引号引起来。
案例 5:
[root@Practice_Server ~]# grep '5\..' grep.txt``western WE Sharon Gray 5.3 .97 5 23``southern SO Suan Chin 5.1 .95 4 15``northeast NE AM Main Jr. 5.1 .94 3 13``central CT Ann Stephens 5.7 .94 5 13
说明:
打印所有包含数字 5,后面跟一个.号 再跟一个任意字符的行。(.)号代表单个字符,被(\)转义后,只代表本身一个.号。
案例 6:
[root@Practice_Server ~]# grep '^[we]' grep.txt``western WE Sharon Gray 5.3 .97 5 23``eastern EA TB Savage 4.4 .84 5 20
说明:
打印所有字母 w 和 e 开头的行。[]表示任意一个字符都可以匹配。
案例 7:
[root@Practice_Server ~]# grep '[^0-9]' grep.txt``northwest NW Charles Main 3.0 .98 3 34``western WE Sharon Gray 5.3 .97 5 23``southwest SW Lewis Dalsass 2.7 .8 2 18``southern SO Suan Chin 5.1 .95 4 15``southeast SE Patricia Hemenway 4.0 .7 4 17``eastern EA TB Savage 4.4 .84 5 20``northeast NE AM Main Jr. 5.1 .94 3 13``north NO Margot Weber 4.5 .89 5 9``central CT Ann Stephens 5.7 .94 5 13
说明:
打印包含非数字字符的行。由于至少每一行有一个非数字字符,因此说有行都被打印。
案例 8:
[root@Practice_Server ~]# grep '[A-Z][A-Z] [A-Z]' grep.txt``eastern EA TB Savage 4.4 .84 5 20``northeast NE AM Main Jr. 5.1 .94 3 13
说明:
打印了包含两个大写字符、后跟一个空格和一个大写字符的行,例如 TB Savage 和 AM Main Jr。
案例 9:
[root@Practice_Server ~]# grep 'ss* ' grep.txt``northwest NW Charles Main 3.0 .98 3 34``southwest SW Lewis Dalsass 2.7 .8 2 18``central CT Ann Stephens 5.7 .94 5 13
说明:
打印包含一个 s、后跟 0 个或多个连着的 s 和一个空格的文本行。
案例 10:
[root@Practice_Server ~]# grep '[a-z]\{9\}' grep.txt``northwest NW Charles Main 3.0 .98 3 34``southwest SW Lewis Dalsass 2.7 .8 2 18``southeast SE Patricia Hemenway 4.0 .7 4 17``northeast NE AM Main Jr. 5.1 .94 3 13
说明:
打印所有出现至少 9 个小写字母连在一起的行,例如,northwest,southwest,southeast,northeast。
案例 11:
[root@Practice_Server ~]# grep '\(3\)\.[0-9].*\1 *\1' grep.txt
说明:
如果某一行包含一个 3 后面跟一个句点和一个数字,再任意多个字符(.*),然后跟一个 3个或任意多个制表符,再接一个 3,则打印该行。
案例 12:
[root@Practice_Server ~]# grep '\<north\>' grep.txt``north NO Margot Weber 4.5 .89 5 9
说明:
打印所有包含单词 north 的行。“\<”是词首定位符“\>”是词尾定位符。
案例 13:
[root@Practice_Server ~]# grep '\<[a-z].*n\>' grep.txt``northwest NW Charles Main 3.0 .98 3 34``western WE Sharon Gray 5.3 .97 5 23``southern SO Suan Chin 5.1 .95 4 15``eastern EA TB Savage 4.4 .84 5 20``northeast NE AM Main Jr. 5.1 .94 3 13``central CT Ann Stephens 5.7 .94 5 13
说明:
打印所有包含以小写字母开头,以 n 结尾,中间由任意多个字符组成的单词的行。注意符号.*,他代表任意字符,包括空格。
grep 选项测试案例
测试文件同上面那个
案例 14:
[root@Practice_Server ~]# grep -n 'north' grep.txt``1:northwest NW Charles Main 3.0 .98 3 34``7:northeast NE AM Main Jr. 5.1 .94 3 13``8:north NO Margot Weber 4.5 .89 5 9
说明:
选项-n 在找到指定模式的行前面加上其行号再一并输出。
案例 15:
[root@Practice_Server ~]# grep -i 'pat' grep.txt``southeast SE Patricia Hemenway 4.0 .7 4 17
说明:
选项-i 关闭大小写敏感性。表达式 pat 包含任意大小写的组合都符合。
案例 16:
[root@Practice_Server ~]# grep -v 'Suan Chin' grep.txt``northwest NW Charles Main 3.0 .98 3 34``western WE Sharon Gray 5.3 .97 5 23``southwest SW Lewis Dalsass 2.7 .8 2 18``southeast SE Patricia Hemenway 4.0 .7 4 17``eastern EA TB Savage 4.4 .84 5 20``northeast NE AM Main Jr. 5.1 .94 3 13``north NO Margot Weber 4.5 .89 5 9``central CT Ann Stephens 5.7 .94 5 13
说明:
这个实例中,选项-v 打印所有不含模式 Suan Chin 的行。选项-v 可用来删除输入文件汇中特定的条目。如果真要删除这些条目,就要把 grep 的输出重定向到一个临时文件中,然后把临时文件的名字改成原文件的名字。
注意不能从原文件重定向到原文件,这样会破坏原文件的。
案例 17:
[root@Practice_Server ~]# grep -l 'SE*' sed.txt grep.tx``sed.txt``grep.txt
说明:
选项-l 使 grep 只输出包含模式的文件名,而不输出文本行。
案例 18:
[root@Practice_Server ~]# grep -c 'west' grep.txt``3
说明:
选项-c 让 grep 打印出含有模式的行的数目。这个数字并不代表模式的出现次数。例如,即使 west 在某行中出现 3 次,这行也只计一次。
案例 19:
[root@Practice_Server ~]# grep -w 'north' grep.txt``north NO Margot Weber 4.5 .89 5 9
说明:
选项-w只查找作为一个词,而不是词的一部分出现的模式。这条命令只打印包含词north的行,而不打印那些 northwest、northwest 等中出现的行。
grep 与管道
grep 的输入不一定都是文件,它也常常从管道读取输入。
案例 20:
[root@Practice_Server ~]# ls | grep "grep"``grep.txt``[root@Practice_Server ~]# ls | grep "^gr"``grep.txt
说明:
ls 的命令的输出通过管道传给 grep。输出结果字母 gr 开头的所有行都被打印出来了,也就是说,被选中的目录被打印出来了。
egrep 扩展
egrep 在 grep 的基础上增加了更多的元字符。但是 egrep 不允许使用\(\),\{\}.
|
元字符 |
功能 |
示例 |
示例的匹配对象 |
| ^ |
行首定位符 |
/^love/ |
匹配所有以 love 开头的行 |
| $ |
行尾定位符 |
/love$/ |
匹配所有以 love 结尾的行 |
| . |
匹配除换行外的单个字符 |
/l..e/ |
匹配包含字符 l、后跟两个任 意字符、再跟字母 e 的行 |
| * |
匹配零个或多个前导字符 |
/*love/ |
匹配在零个或多个空格紧跟 着模式 love 的行 |
| [] |
匹配指定字符组内任一字符 |
/[Ll]ove/ |
匹配包含 love 和 Love 的行 |
| [^] |
匹配不在指定字符组内任一字符 |
/[^A-KM-Z]ove/ |
匹配包含 ove,但 ove 之前的那个字符不在 A 至 K 或 M 至 Z |
|
egrep 新增的元字符 |
|||
| + |
匹配一个或多个加号前面的字符 |
‘[a-z]+ove’ |
匹配一个或多个小写字母后 跟 ove 的字符串。move love approve |
| ? |
匹配 0 个或一个前导字符 |
‘lo?ve’ |
匹配 l 后跟一个或 0 个字母 o以及 ve 的字符串。love lve |
| a|b |
匹配 a 或 b |
‘love|hate’ |
匹配 love 和 hate 这两个表达 式之一 |
| () |
字符组 |
‘love(able|ly)(ov+)’ |
匹配 loveable 或 lovely 匹配 ov 的一次或多次出现 |
案例 21:
[root@Practice_Server ~]# egrep "west|north" grep.txt` `northwest NW Charles Main 3.0 .98 3 34``western WE Sharon Gray 5.3 .97 5 23``southwest SW Lewis Dalsass 2.7 .8 2 18``northeast NE AM Main Jr. 5.1 .94 3 13``north NO Margot Weber 4.5 .89 5 9
说明:
grep 不支持“|”这个,egrep 支持“|”,egrep 查到了,包含 west 或者 north 的行。
—END—
如何入门学习网络安全/黑客技术
【—-帮助网安学习,以下所有学习资料文末免费领取!—-】
大纲
首先要找一份详细的大纲。
学习教程
第一阶段:零基础入门系列教程
该阶段学完即可年薪15w+
第二阶段:技术入门
该阶段学完年薪25w+
阶段三:高阶提升
该阶段学完即可年薪30w+
面试刷题
最后,我其实要给部分人泼冷水,因为说实话,上面讲到的资料包获取没有任何的门槛。
但是,我觉得很多人拿到了却并不会去学习。
大部分人的问题看似是“如何行动”,其实是“无法开始”。
几乎任何一个领域都是这样,所谓“万事开头难”,绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。
如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比一切都重要。
资料领取
上述这份完整版的网络安全学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码 即可自动领取↓↓↓
或者
【点此链接】领取
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118852.html





