正则表达式(Regular Expression RE)
什么是正则表达式:
发明一套符号,不同的符号有不同的含义,方便我们在文件中查找/过滤内容
正则表达式分类:
基础正则 Basic RE
^ $ ^$ . * .* [] [^]
扩展正则 Extended RE ERE
+ | () {} ?
通配符与正则的区别?
通配符:方便我们查找文件 Linux下面大部分命令支持
正则: 方便我们进行过滤(在文件中找内容) Linux三剑客 开发语言 python PHP JAVA GO
使用正则注意事项:注意中文符号 给grep egrep加上颜色
基础正则:
1.^ 以...开头的行 ^m ^oldboy
- $ 以...结尾的行 m$
cat -A显示出文件中所有隐藏符号 每一行结尾==加上$- ^$空行 这一行中什么都没有
排除空行 grep -v '^$' oldboy.txt- . (点)任意一个字符(单个)不会匹配出空行 grep -o 显示grep每次过滤出什么内容(匹配到什么内容)
显示grep执行过程- \ 转义字符 去掉符号原有的特殊含义
转义字符系列 \n 回车换行 \t 按tab
把oldboy.txt 回车替换为\t tr '\n' '\t' <oldboy.txt
echo -e 让echo支持转义字符
[root@oldboy59 ~/oldboy]# echo -e 'as\nda\nsda'
as
da
sda
echo -n 不输出每行结尾的回车
6.* 前一个字符连续出现0次或0次以上==重复(repetition)
00000连续出现的0
oldboy 连续出现在的字母
- .所有任意字符
特点:贪婪性匹配能匹配多少就匹配多少 来者不拒,正则表达式表示多有(.)或者是连续出现的时候 会产生贪婪
8.[] [abc] 相当于一个字符,匹配到a或b或c
[root@oldboy59 ~/oldboy]# grep '[a-z,A-Z]' oldboy.txt
am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy59 ~/oldboy]# grep '[a-zA-Z]' oldboy.txt
am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboy59 ~/oldboy]# grep '[0-Z]' oldboy.txt
am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
显示以m或n或o开头的行
[root@oldboy59 ~/oldboy]# grep '^[mno]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
以m或n或点结尾的行
[root@oldboy59 ~/oldboy]# grep '[mn.]$' oldboy.txt
I teach linux.
not 4900000448.
显示以m或n或o开头的并且以m或n或点结尾的行
[root@oldboy59 ~/oldboy]# grep '^[mno].*[mn.]$' oldboy.txt
not 4900000448.
9.[^] [^abc]不要a或不要b或不要c
[root@oldboy59 ~/oldboy]# grep '[^abc]' oldboy.txt
am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[^abc] VS grep -v
[^abc]不要a或b或c
grep -v 排除某一行
扩展正则:
1.+前一个字符连续出现一次或多次,一般就是与[]一起使用
[root@oldboy59 ~/oldboy]# egrep '[a-Z]+' oldboy.txt
am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
- | 或者
[root@oldboy59 ~/oldboy]# egrep 'oldboy|linux' oldboy.txt
am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
3.() 被括起来的内容相当于一个整体
用来表示后向引用(反向引用)
4.{} 连续出现 b{m,n} 前一个字符连续出现至少m次,至多n次
[root@oldboy59 ~/oldboy]# egrep '0{2,3}' oldboy.txt
my qq is 49000448
not 4900000448.
b{m}前一个字符连续出现m次
b{m,} 前一个字符至少出现m次
b{,n} 前一个字符最多出现n次
5.? 前一个字符出现0次或1次
正则支持命令 grep/sed/awk
扩展正则支持命令grep -E/egrep 或 sed -r 或 awk
网友评论