正则表达式(REGular EXPression),正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法。
正则表达式可以分为基本正则表达式 (Basic REGEXP) 、扩展正则表达式 (EXtended REGEXP)和Perl 正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)三种。目前,我们只使用前两种正则表达式来完成日常的linux下的命令操作。
Linux中,基本正则表达式和扩展正则表达式都有相同的匹配分类:1、字符匹配;2、次数匹配;3、位置锚定;4、分组锚定。扩展正则表达式还支持【或者锚定】。
正则表达式:REGular,EXPression,REGEXP
元字符:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:digit:] [:lower:] [:upper:] [:punct:] [:space:] [:alpha:] [:alnum:]
匹配次数(工作在贪婪模式下,尽可能长的去匹配):
*:匹配其前面的字符任意次,包括0次
.*:任意长度的任意字符
?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符,至少m次,至多n次
位置锚定:
^:锚定必须出现的行首,此字符串后边的任意内容必须出现在行首(放在词前)
$:锚定行尾,此字符串前边的任意内容必须出现在行尾(放在词尾)
^$:空白行
\<或\b:其后边的字符必须作为单词首部出现
\>或\b:其前边的字符必须作为单词尾部出现
分组:
\(\)
\(ab\)*:ab可以出现任意次
后向引用
\2:
\3:
或者:只用于扩展正则表达式
a|b:匹配 a或者b,a or b
C|cat:匹配 C或者cat
grep:使用基本正则表达式定义的模式来过滤文本的命令: 使用格式为:grep command FILE
-i:不区分大小写
-v:反向查找,显示没有被模式匹配到的行
-o:只显示被匹配到的字符串
--color:将匹配结果用高亮颜色显示出来
-E:使用扩展正则表达式
-A #:当某一行被指定后,显示其后#行
-B #:当某一行被指定后,显示其前#行
-C #:当某一行被指定后,显示其前,后#行
正则表达式不仅仅在我们查看文本中匹配内容时用到,它常常用于shell脚本的编程及其他文本编辑器中替换指定的字符串为我们需要的字符串,这些就需要sed等其他的命令来进行,正则表达式可以提高我们的脚本编程速度。