第1章 正则表达式
1.1 什么是正则
特殊符号表示文字 文本
^ 开头
[0-9] 数字
1.2 作用
提高效率 省事
1.3 分类
基础正则表达式
^ $ ^$ . * .* [0-9] [^0-9]
扩展正则表达式
| () + {} ?
1.4 准备
- 预警-中文符号
- grep/egrep
cat >>/etc/profile<<EOF
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF
source /etc/profile 给找到的内容加上红色
1.5 基础正则表达式
环境准备-创建oldboy.txt内容如下
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
- ^oldboy 以oldboy开头的行 以....开头的行
[root@dzc oldboy]# grep "^m" oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!
2. $ m$ 以m结尾的行 以.....结尾的行
[root@dzc oldboy]# grep "m$" oldboy.txt
my blog is http://oldboy.blog.51cto.com 注意每行的最后不要有空格,否则找不到内容
3. ^$ 空行 这一行里面什么符号都没有
[root@dzc oldboy]# grep -n "^$" oldboy.txt 显示文件的空行并显示行号
4. .(点) 任意一个字符
[root@dzc oldboy]# grep "oldb.y" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@dzc oldboy]# grep -o "oldb.y" oldboy.txt -o只输出文件中匹配到的部分。
oldboy
oldboy
oldbey
5. 撬棍 转义字符 脱掉马甲打回原形
找出文件中以小数点(.)结尾的行
[root@dzc oldboy]# grep -n ".$" oldboy.txt
2:I teach linux.
6:my qq num is 49000448.
7:not 4900000448.
6. * 前一个文本连续出现了0次或1次以上
0000
连续出现了0次 就是没有出现
贪婪性---能有多少,显示多少
[root@dzc oldboy]# grep -o "0*" oldboy.txt
000
00000
7 .* 所有内容 包括空行
(所有) 连续出现的时候 贪婪性
[root@dzc oldboy]# grep "^.*o" oldboy.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
8 [abc] 筐 表示一个整体 相当于是一个字符 a或b或c
[root@dzc oldboy]# grep "[a-z]" oldboy.txt 找小写字母
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinse chess!
[root@dzc oldboy]# grep "[a-zA-Z]" oldboy.txt 找大小写的字母
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinse chess!
9 [^abc] 筐 表示一个整体 排除a或排除b或排除c
[root@dzc oldboy]# grep "[^acb]" oldboy.txt
1.5.1 grep -v 排除 [^abc]
grep -v 排除行
[^abc] 字符 文字
1.5.2 练习1:以大写字母开头的行
[root@dzc oldboy]# grep "^[A-Z]" oldboy.txt
1.5.3 练习2:以小写字母结尾的行
[root@dzc oldboy]# grep "[a-z]$" oldboy.txt
1.5.4 练习3:以 m或n或o开头的 并且以 m或g 结尾的行
[root@dzc oldboy]# grep "^[mon].*[mg]$" oldboy.txt
1.5.5 小结
特殊符号-通配符-基础正则表达式
1.特殊符号
&& >> > / $ . .. ~ | ! #
2.通配符* {}
3.正则
1)按照一行
2)^ $ ^$ .* []
1.6 扩展正则表达式
1.6.1 + 前一个字符连续出现了一次或一次以上
连续出现 -- 重复
[root@oldboyedu-40-nb oldboy]# egrep "0+" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu-40-nb oldboy]# egrep -o "0+" oldboy.txt
000
00000
补充:
grep -o grep命令每次找到的东西,grep执行过程 但是不会显示空行
1.6.2 取出文件中连续出现的大写字母取出来
[root@dzc data]# egrep -o "[A-Z]+" oldboy.txt
I
I
I
OLDBOY
[root@dzc data]# egrep -o "[A-Z]{2,6}" oldboy.txt
OLDBOY
1.6.3 | 或者
[root@dzc data]# egrep "oldboy|oldbey" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
1.6.4 () 小括号里面的内容是一个整体 相当于是一个字符 反向引用
[root@dzc data]# egrep "oldb(o|e)y" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
1.6.5 反向引用
- 先把你要的内容保护起来 ...(你要的内容)...
- 在使用 1 2 3
[root@dzc data]# echo 123456 |sed -r 's#..(..)..#1#g'
34
1.6.6 {} 0{n,m}取出0连续出现最少n次,最多m次
[root@dzc data]# egrep "0{2,3}" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@dzc data]# egrep "0{2,4}" oldboy.txt
my qq num is 49000448.
not 4900000448.
取出文件中连续出现3-6次的字母
[root@dzc data]# egrep "[a-zA-Z]{3,6}" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball an chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
1.6.7 ? 前一个字符连续出现了 0次或1次
[root@dzc data]# cat a.log
good
gd
god
goood
[root@dzc data]# egrep "gd|god" a.log
gd
god
[root@dzc data]# egrep "go?d" a.log
gd
god
1.6.8 小结
基础正则
^ $ ^$ .* [abc] [a-z] [^abc]
扩展正则表达式
+ | () {} ?
基础正则与扩展正则
egrep sed -r awk
本博文中所使用的系统版本为: CentOS release 6.9 (Final) 内核版本为: 2.6.32-696.10.1.el6.x86_64 linux正在持续学习中,如有雷同请见谅!!!