传说中的Linux三剑客命令之grep(三剑客老幺)别人只知道了而我却做到了

本文详细介绍了Linux命令grep,包括其工作原理、正则表达式使用、选项设置以及egrep扩展,帮助读者深入理解并掌握grep在文本搜索中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传说中的Linux三剑客命令之grep(三剑客老幺)别人只知道了而我却做到了

grep(三剑客老幺)

1.介绍

Given one or more patterns, grep searches input files for matches to the patterns. When it finds a match in a line, it copies the line to standard output (by default), or produces whatever other sort of output you have requested with options.
Though grep expects to do the matching on text, it has no limits on input line length other than available memory, and it can match arbitrary characters within a line. If the final byte of an input file is not a newline, grep silently supplies one. Since newline is also a separator for the list of patterns, there is no way to match newline characters in a text.

给定一个或多个模式,grep在输入文件中搜索与模式匹配的内容。当它在一行中找到匹配项时,它将该行复制到标准输出(默认情况下),或者使用选项生成您请求的任何其他类型的输出。
尽管grep希望在文本上进行匹配,但是除了可用内存之外,它对输入行长度没有限制,并且它可以匹配一行中的任意字符。如果输入文件的最后一个字节不是换行符,grep会自动提供一个。由于换行符也是模式列表的分隔符,因此无法在文本中匹配换行符。(来自百度翻译)

2.如何工作

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

3.正则表达式

元字符功能示例示例匹配的对象
^行首定位符/^root/匹配所有以root开头的行
$行尾定位符/root$/匹配所有以root结尾的行
.匹配除换行外的单个字符/r…t/匹配字母r,然后两个任意字符,再以t结尾的行,比如root,rout等
*匹配0个或多个前导字符(包括回车)/r*oot/匹配0个或多个r之后紧跟着oot的行,比如oot,rrroot等
[]匹配指定字符组内任意字符/[LI]oot/匹配包含root和Root的行
[^]匹配不在指定字符组内的任意一个字符/[^A-KM-Z]oot/匹配包含oot,但oot之前的那个字符不在A至K或M至Z间的行
\(…\)保存已匹配的行
&保存查找串以便在替换串中引用s/root/**&**/符号&代表查找串,字符串root将替换前后各加了练个**的引用,即root变成**root**
\<词首定位符/\<root/匹配包含以root结尾的单词的行
\>词尾定位符/root\>/匹配包含以root结尾的单词的行
x{m\}连续m个x/o\{5\}/匹配出现连续5个字母o行
x{m,\}至少m个x/o\{5,\}/匹配至少出现连续5个字母o行
x{m,n\}至少m个x,但不超过n个x/o\{5,10\}/匹配出现5至10个字母o行

4.选项

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

5.egrep扩展

元字符功能示例示例匹配的对象
^行首定位符/^root/匹配所有以root开头的行
$行尾定位符/root$/匹配所有以root结尾的行
.匹配除换行外的单个字符/r…t/匹配字母r,然后两个任意字符,再以t结尾的行,比如root,rout等
*匹配0个或多个前导字符(包括回车)/r*oot/匹配0个或多个r之后紧跟着oot的行,比如oot,rrroot等
[]匹配指定字符组内任意字符/[LI]oot/匹配包含root和Root的行
[^]匹配不在指定字符组内的任意一个字符/[^A-KM-Z]oot/匹配包含oot,但oot之前的那个字符不在A至K或M至Z间的行
+匹配一个或多个 加号前面的字符‘[a-z]+oot’匹配一个或多个小写字母后跟oot的字符串。
?匹配0个或一个前导字符‘ro?ot’匹配r后跟一个或0个字母o以及ot的字符串。
a|b匹配a或b‘root|ruut’匹配root和ruut这两个表达 式之一
()字符组‘root(login|exit)(oo+)’匹配rootlogin或rootexit匹配oo的一次或多次出现

6.说明

grep 不支持“|”这个,egrep 支持“|”。“|”为管道符。
以上内容来源。1


  1. 参考《跟老男孩学Linux三剑客命令V1》第三章 Grep讲解 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值