在介绍正则表达式之前,我们先普及一下,Linux系统下三大文本搜索工具grep、sed、awk。它们各自的作用如下:
grep:grep(支持正则表达式) egrep(支持扩展表达式),fgrep(快捷搜索不支持正则表达 式):文本搜索工具;基于一组筛选条件对给定文本进行搜索操作;
sed:Stream EDitor,流编辑器,行编辑工具;文本编辑工具;(本质是编辑器)
awk:GNU awk,文本格式化工具;文本报告生成器;(文本美化器,可以理解为文字版的美图秀秀)
正则表达式:
“由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能”,可以理解为用一些特定含义的符号,根据需要进行排列组合,而形成的一串特定含义的筛选规则。
例如“性别=不男不女”
注意:(默认为贪婪模式,能匹配多少就匹配多少)
它的使用方法如下:
grep命令:
grep [OPTIONS]-选项 PATTERN-过滤条件 [FILE...]-作用文件
常用选项:
--color=auto:给符合要求的文本上色显示;
-i:不区分字符大小写;
-o:仅显示符合过滤条件的文本;
-v, --invert-match:反向匹配;()
-E:支持扩展的正则表达式;
-q,--quiet, --silient:静默模式,不输出任何信息;(有时在返回海量数据时,我们仅仅是想查看命令的成、败状态,就用此模式,“你好我也好”)
基本正则表达式元字符:(就是代表特定含义的字符)
字符匹配:
.:匹配任意单个字符;
[ ]:匹配范围内的任意单个字符;
[^ ]:匹配范围外的任意单个字符;
[:digit:]数字
[:lower:]小写字母
[:upper:]大写字母
[:alpha:]所有字母
[:alnum:]所有数字和字母
[:space:]空白字符
[:punct:]标点符号
匹配次数:
*:匹配前面的字符任意次(0,1或多次);
grep"x*y": xxxyabc yabc abcxy abcy
.*:任意长度的任意字符;
\+:匹配前面的字符至少1次;
grep"x\+y": xxxyabc yabc abcxy abcy
\?:匹配前面的0次或1次,即前面的字符可有可无;
grep"x\?y": xxxyabc yabc abcxy abcy
\{m\}:其前面的字符出现m次,m为非负整数;
grep"x\{2\}y": xxxyabc yabc abcxy abcy
\{m,n\}:其前面的字符出现m次,m为非负整数;[m,n]
\{0,n\}:至多n次;
\{m,\}:至少m次;
位置锚定
限制使用模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的哪个位置;
^:行首锚定;用于模式的最左侧,^PATTERN
$:行尾锚定;用于模式的最右侧,PATTERN$
^PATTERN$:要让PATTERN完全匹配一整行;
$:空行;
^[[:space:]]*$:
单词:由非特殊字符组成的连续字符(字符串)都称为单词;
\<或\b:词首锚定,用于单词模式的左侧,格式为\<PATTERN,\bPATTERN
\>或\b:词尾锚定,用于单词模式的右侧,格式为PATTERN\>,PATTERN\b
\<PATTERN\>:单词锚定;
分组与引用:
\(PATTERN\):将此PATTERN匹配到的字符当作一个不可侵害整体进行处理;
Note:分组括号中的模式匹配到的字符会被正则表达式引擎自动记录于内部的变量中,这些变量是\1,\2,\3,...
pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)
\n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配到的字符串;(不是模式,而是模式匹配的结果)
\1:第一组括号中的pattern匹配到的字符串;
\2:第二组括号中的pattern匹配到的字符串;
后向引用:引用前面的括号中的模式所匹配到的字符串;
常用选项之二:
-E,--extended-regexp:支持使用扩展正则表达式
-F,--fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep;
-G,--basic-regexp:支持使用基本正则表达式;
-P,--perl-regexp:支持使用pcre正则表达式;
-e PATTERN,--regexp=PATTERN:多模式机制;
-f FILE,--file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script;
-A NUM,多现实它的后一行
-B NUM,多现实它的前一行
-C NUM,多现实上下各一行
egrep:
支持使用扩展正则表达式的grep命令,相当于grep -E;
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[ ]:范围内的任意单个字符
[^ ]:范围外的任意单个字符
匹配次数:
*:任意次;
?:0次或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m次,至多n次;
{0,n}
{m,}
位置锚定:
^:行首
$:行尾
<,\b:词首
\>,\b:词尾
分组及引用:
(pattern):分组,括号中的模式匹配到的字符会被记录于正则表达式引擎内部的变量中;
后向引用:\1,...
或者:
a|b:a或者b
C|cat:表示C或cat
(C|c)at:表示Cat或cat