正则表达式的学习与正确使用
正则表达式的基本作用是:搜索文本。
搜索字符的3种方式:
1、精确搜索(需要预先知道要搜索内容的准确内容)
2、通配符搜索(使用具有特殊含义的符号代替模糊内容,比精确搜索更加灵活,但是预定义的符号受限)
3、正则表达式搜索(预定义的符号更多,搜索起来更加灵活,这些特殊字符在正则表达式中称为元字符,即预定义好的具有特殊含义的符号,这些符号能够进行通配)
学习正则表达式本质就是学习各种各样的元字符并记住这些元字符的含义。所以正则表达式有以下两个特点:可读性差和编写容易
正则表达式的分类:
基础正则表达式(BRE)
扩展正则表达式(ERE)
编程语言支持的正则表达式
BRE 和 ERE 语法基本一致,只有部分元字符需要区别对待。
在ERE中,以下字符可以直接使用? + { } | ( )
, 但是在BRE中需要在其前面加上反斜杠进行转义。
grep、sed
命令默认使用基础正则表达式
grep -E、sed -r、egrep、awk
命令使用的是扩展正则表达式
grep -E 'pattern' filename
pattern位置为正则表达式,该行命令的意思是从名为 filename 的文件中每读取一行数据都使用正则表达式进行匹配
cmd | grep -E 'pattern'
对命令中输入的数据进行正则表达式匹配,例如echo "hello world" | grep -E "world"
匹配字符
反斜杠序列
\n
:匹配换行符
\t
:匹配制表符
shell 中的制表符可以通过组合键 ctrl + v +i
来输入。
grep 命令不支持 '\t'
\w
:匹配单词字符
单词(word),在正则表达式中的含义是 [a-zA-Z0-9_]
组成的字符或字符串都是单词,例如 nihao, hello world_
第一个单词是 nihao
,第二个单词是 hello
,第三个单词是 world_
。
\W
:匹配非单词字符
\s
:匹配空白字符
\S
:匹配非空白字符
\d
:匹配数字
\D
:匹配非数字
.
:表示匹配任意单个字符
中括号表达式
[abcde...]
:匹配中括号内的任意单个字符
ubuntu@ubuntu:~$ echo "hello world" | grep -E h[abcde]
hello world
# 当h和h匹配成功后,e则从h后面的字符中继续匹配;
# 但当e与[]匹配成功后,下一个字母l会重新开始匹配,即l首先会和h对比,匹配失败。
ubuntu@ubuntu:~$ echo "hello hello" | grep -E h[abcde]
hello hello