grep 命令与正则表达的协同使用

 我来答
抛下思念17
2022-06-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6091
采纳率:99%
帮助的人:32.8万
展开全部

UpDate 2018-10-22

Author unnam3d

Mail indv.zhang@foxmail.com

Tip Please feel free to contact me via mail above for any confusion or suggestions

grep(Global Research)亦即根据某一个 模式(过滤规则) 去全局性的搜索文本,并将符合模式的文本行显示出来。grep其本身的意义是做部分匹配,也就是说,当你使用grep进行搜索的时候,只要某一行的内容里部分匹配,grep就会将结果显示出来。而这里的 模式(Pattern) 是指,文本字符和正则表达式的元字符组合而成的匹配条件。简而言之,grep就是使用基本正则表达式定义的模式来过滤文本的命令。

notice:grep 默认工作在 贪婪模式 下,也就是在匹配的过程中,会尽可能长的匹配,能匹配到哪就匹配到哪。

usage: grep [options] PATTERN [FILE...]

正则表达式分为 基本正则表达式(Basic REGEXP) 扩展正则表达式(Extended REGEXP)

无论是哪一种,正则表达式都含义几个特性:

正则表达式里都有一些元字符,这些元字符不表示其本身的意义,而是在正则表达式中有其特定的意义。我在 bash特性简单梳理 一文中提及过文件名通配(globbing)。

在文件名通配中,这些元字符的特定意义如下:

而在正则表达式中,元字符的特定意义为:

除了这些特定的元字符的意义外,正如文件通配符中所描述的字符集合,正则表达式同样支持字符集合:

位置锚定,就是在进行搜索的时候,所搜索的字符必须出现在特定的位置。

分组的意义,通俗的来讲,就是将一捆字符作为一个整体来看待,用 \(\) 来表示。

例如: \(ab\)* 将ab作为一个整体,星号修饰的ab这一个整体。而ab*仅仅修饰b一个字符

$ grep '\(ab\)*' test.txt

上面这个命令就表示在文件 test.txt 中匹配ab这一整体,它可以匹配到ab, abab, ababab这样。

后向引用

与分组搭配使用的还有 后向引用 。

扩展正则表达式与正则表达式在很多地方的意义都是相同的。例如:

NOTICE :

除了与正则表达式相同意义的地方,扩展表达式也有其独特的地方:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式