grep命令解析(非常详细)零基础入门到精通,收藏这一篇就够了

grep命令解析(非常详细)零基础入门到精通,收藏这一篇就够了grep 命令解析 非常详细 零基础入门到精通 收藏这一篇就够了 grep 命令

大家好,欢迎来到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—

如何入门学习网络安全/黑客技术

【—-帮助网安学习,以下所有学习资料文末免费领取!—-】

大纲

首先要找一份详细的大纲。

在这里插入图片描述

学习教程

第一阶段:零基础入门系列教程

img

该阶段学完即可年薪15w+

第二阶段:技术入门

该阶段学完年薪25w+

img

阶段三:高阶提升

该阶段学完即可年薪30w+

面试刷题

img
在这里插入图片描述

最后,我其实要给部分人泼冷水,因为说实话,上面讲到的资料包获取没有任何的门槛。

但是,我觉得很多人拿到了却并不会去学习。

大部分人的问题看似是“如何行动”,其实是“无法开始”。

几乎任何一个领域都是这样,所谓“万事开头难”,绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。

如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比一切都重要

资料领取

上述这份完整版的网络安全学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码 即可自动领取↓↓↓
或者

【点此链接】领取
grep命令解析(非常详细)零基础入门到精通,收藏这一篇就够了

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118852.html

(0)
上一篇 2025-11-09 22:33
下一篇 2025-11-10 07:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信