grep和sed需要正则表达式,我们需要注意的正则表达式与通配符用法的区分。
1.正则表达式REGEXP,正则表达式:由一类特殊字符以及文本字符所编写的模式,其中有些字符(元字符)不表示字符字母意义,而表示控制或通配的功能,可通过man regex来查看更详细的信息。
正则表达式有两类,一个是基本正则表达式BRE,另一个是扩展的正则表达式ERE。
正则表达式的引擎:采用不同算法,检查处理正则表达式的软件模块PCRE(Perl Compatible Regular Expressions)
元字符的分类:字符匹配、匹配次数、位置锚定、分组。
.:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符([.]就是.)
[ ^ ]:匹配指定范围外的任意单个字符
[:alnum:]:字母和数字
[:alpha:]:代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]:小写字母 [:upper:] 大写字母
[:blank:]:空白字符(空格和制表符)
[:space:]:水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:]:不可打印的控制字符(退格、删除、警铃...) )
[:digit:]:十进制数字 [:xdigit:] 十六进制数字
[:graph:]:可打印的非空白字符
[:print:]:可打印字符
[:punct:]:标点符号
匹配次数是用在要指定次数的字符后面,用于指定前面的字符要出现的次数。
*:匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配其前面的字符0 或1次
\+:匹配其前面的字符至少1次
\{n\}:匹配前面的字符n次 次
\{m,n\}:匹配前面的字符至少m 次,至多n次 次
\{,n\}:匹配前面的字符至多n次
\{n,\}:匹配前面的字符至少n次
位置锚定是用于定位出现的位置。
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$:用于模式匹配整行
^$:空行
^[[:space:]]*$:空白行
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定;用于单词模式的右侧
\<PATTERN\>:匹配整个单词
分组:\(\)将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+。分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1, \2, \3, ...。\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符。
示例:\(string1\+\(string2\)*\);\1 :string1\+\(string2\)*;\2 :string2
后向引用:引用前面的分组括号中的模式所匹配字符 , 而非模式本身。
\|:或者
示例:a\|b:a 或b;C\|cat: C 或cat ;\(C\|c\)at:Cat 或cat
扩展的正则表达式,顾名思义,就是在正则表达式上的扩展,是在元字符匹配方面的写法简化。
大部分的元字符和正则表达式相同,这里把不同的记录一下:
字符匹配:
[ ]:指定范围内的字符。
次数匹配:
?:0 或1次
+:1 次或多次
{m}:匹配m次
{m,n}:至少m ,至多n次
分组:
() 将一个或多个字符捆绑在一起,当作一个整体进行处理。
|:或者
示例:a|b:a 或b;C|cat:C 或cat;(C|c)at:Cat 或cat
上述就是我所知道的正则表达式内容了,可能有所遗漏,大家可以通过man帮助补足,下面我们看进入正题,也就是运用上了。
2.grepgrep:Global search REgrular expression and Print out the line
grep 的作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,并打印匹配到的行。
grep的模式:由正则表达式字符及其文本字符所编写的过滤条件。
grep的用法:
grep [OPTION]... PATTERN [FILE]...
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
常用的[option]:
--color=auto:对匹配到的文本着色显示
-v:显示不被pattern 匹配到的行,反向选择
-i:忽略字符大小写
-n:显示匹配的行号
-c:统计匹配的行数
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-A #:after,后#行 ,显示包含这行后续#行
-B #:before,前#行
-C #:context,前后各#行
-e:实现多个选项间的成逻辑or关系,grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整个单词,(字母,数字,下划线不算单词边界)
-E:使用ERE
-F:相当于fgrep ,不支持正则表达式
-l <范本样式>:列出文件内容符合指定的范本样式的文件名称。
-h <范本样式>:在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H <范本样式>:在显示符合范本样式的那一列之前,标示该列的文件名称。
-e <范本样式>:指定字符串作为查找文件内容的范本样式。