正则表达式(Regular Expression)
在许多编程语言中,都有对正则表达式的支持,在Linux中也不例外。正则表达式的作用是帮助我们快速筛选出想要的数据。也可以校验输入的数据是否符合我们的要求。
正则表达式的类型
正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。
在Linux中,常用的正则表达式有:
POSIX 基本正则表达式(BRE)引擎
POSIX 扩展正则表达式(BRE)引擎
语系对正则表达式影响
计算机软件都是0与1的结果,我们所看到的文字都是编码表转换而来的。由于不同语系的编码数据不同或者编码的顺序不同,比如zh_CN.big5与C这两种语系编码的顺序就不相同。下面是这两种语系的编码:
zh_CN.big5 : 0 1 2 3 4 … A B C D … Z a b c d … z
C : 0 1 2 3 4 … a A b B c C d D … z Z
如果使用[A-Z]选取大写字母,若是使用C语系码表,则可以找出所有的大写字母(因为是连续的)。若是使用的zh_CN.big5语系码表,则除了大写字母,还会把小写字母的b到z也给找出来。
语系造成的选取问题
由于不同的语系会对正则表达式造成影响,但可以使用一些特殊符号来解决这个问题。
基础正则表达式
下面使用的语系是C,并且使用用grep命令来演示。
查找指定的字符
[] : 查找中括号内包含的字符。
- 栗子:
grep '[a]' RE_File
,查找出RE_File文件中包含字母a的行。
- 栗子:
[^ ] : 查找不包括该集合的字符。
栗子:
grep '[^a]' RE_File
,查找出RE_File文件中不包含字母a的行。栗子:
grep '[^a]a' RE_File
,查找出RE_File文件中a前面不是a的行。例如这个aa
这不会被查找出来。
[ - ] :指定查找一个区间。
- 栗子:
grep '[a-z]' RE_File
,查找出RE_File文件中包含小写字母的行。
- 栗子:
[:upper:] : 查找出大写字母的特殊符号。
- 栗子 :
grep '[[:upper:]]' RE_File
, 查找出RE_File文件中包含大写字母的行。如果语系是C,也可以写成'[A-Z]'
。
- 栗子 :
行首与行尾字符:^,$
^ : 表示行首
栗子 :
grep '^t' RE_File
, 查找出RE_File文件中首字母是t的行。栗子 :
grep '^[a-z]' RE_File
, 查找出RE_File文件中首字母是t的行。
$ : 表示行尾
栗子 :
grep 't$' RE_File
, 查找出RE_File文件中行尾是t的行。栗子 :
grep '\.$' RE_File
, 查找出RE_File文件中行尾是小数点.
的行。注意因为小数点也是个特殊字符,所有需要使用反斜杠\
来转义成普通字符。
^$ : 查找空行。
- 栗子 :
grep -v '^$' RE_File
, 将RE_File文件中的空行去除。
- 栗子 :
任意一个字符.与重复字符 *
. : 任意一个字符。
- 栗子 :
grep 'g..d' RE_File
, 查找出RE_File文件中第一个字符是g,g后面有两个任意字符,并且以d结尾。比如good
这个字符串就会被查找除来,而gaood
则不会。
- 栗子 :
* : 重复前一个字符0次到无穷次。
- 栗子:
grep 'ooo* RE_File'
, 查找出RE_File文件中每行有两个oo
字符以上的行。
- 栗子:
指定范围
{} : 假设我们想找出2~5个o的连续字符串,那就可以使用这个字符。
栗子:
grep 'o\{2,5\}' RE_File
,查找出RE_File文件中2~5个连续的字符o。因为{}是特殊字符,所以需要转成普通字符。栗子:
grep 'o\{2,\}' RE_File
,查找出RE_File文件中2个以上,并且连续的字符o。
扩展正则表达式
下面只介绍一些扩展的正则表达式:
参考
《鸟哥的Linux私房菜》