linux 正则表达式

linux 正则表达式

1.1 简介

正则表达式是一种表达式可以查找匹配特定准则的文本,其实现原理通过正则表达式引擎(regular expression engine)实现的
Linux主要有两种表达式引擎:

  • POSIX基础正则表达式(basic regular expression,BRE)引擎;
  • POSIX扩展正则表达式(extended regular expression,ERE)引擎。

正则表达式的特殊字符的使用: . * [] ^ $ {} \ + ? | ()

2.1 正则表达式的特殊字符的使用说明

2.1.1 . 匹配任意一个字符

#它与*不同,一个.就占一个位置 grep r..t /etc/passwd  

2.1.2 *匹配前一个字符若干个(带有oo字符的行)。

#这里注意是三个ooo grep ooo* /etc/passwd  

2.1.3 使用^搜索非字母开头的行

grep ^[^a-zA-Z] /etc/passwd 

2.1.4 使用$对文本末端进行匹配

cat /etc/passwd |grep bash$  

2.1.5 如果想对特殊字符进行匹配,可以使用\。但是\本身是特殊字符所以需要对\进行转移

cat .bash_profile  | grep \\$ 

2.1.6 任意字符

[00:33:05][root@tiaoban:~]# grep . aaa.txt  aa aaa aaaa aaaaa bb bbb 

2.1.7 * 表示匹配零次或任意多次

[00:33:40][root@tiaoban:~]# grep ^aaa*$ aaa.txt aa aaa aaaa aaaaa 

2.1.8 ? 表示匹配零次或一次

[00:34:37][root@tiaoban:~]# grep ^aaa\?$ aaa.txt aa aaa 

2.1.9 + 表示匹配一次或多次

[00:37:17][root@tiaoban:~]# grep '^aaa\+$' aaa.txt aaa aaaa aaaaa 

2.1.10 {n,m} 表示匹配n次至m次

[00:37:21][root@tiaoban:~]# grep '^aaa\{1,2\}$' aaa.txt aaa aaaa 

2.1.11 \b 单词分隔,指匹配单词和空格间的位置

[00:40:53][root@tiaoban:~]# grep 'ex' aaa.txt alex alexal #区别注意 [00:40:39][root@tiaoban:~]# grep 'ex\b' aaa.txt alex 

2.1.12 \w 匹配任何字类字符,等于[a-zA-Z0-9_]

2.1.13 \d 匹配一个数字字符,等于 [0-9] \D 匹配一个非数字字符,等于 [^0-9]。

[00:44:58][root@tiaoban:~]# grep -P '\d' aaa.txt 12 2