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
posted @ 2022-05-12 00:46  liwenchao1995  阅读(72)  评论(0编辑  收藏  举报