shell 正则表达式
shell 正则表达式
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