grep 命令与正则表达的协同使用
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 :
除了与正则表达式相同意义的地方,扩展表达式也有其独特的地方: