3月19号
什么是正则表达式?
作用和特殊字符一样。
正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。
开发者
假设“@”代表“I am”,“!”代表“oldboy”,
则这姓echo“@!”的结果就是输出I am oldboy
2、提高效率,快速获取到想要的内容。
1、提高效率,快速获取到想要的内容。
2、三剑客命令grep(egrep),sed,awk
以行为单位处理
3、实践来讲解
易混淆的事项
1.和通配符区别
2.开发正则,一般是perl兼容正则表达式。
3.Linux三剑客正则表达式
export LC_ALL=C
分类:
1.BRE基本正则表达式 (grep)
2. Ere扩展正则表达式 (egrep)
[root@oldboyedu ~/test]# grep "^I" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
[root@oldboyedu ~/test]# ls /data
a.txt aa.txt b.txt c.txt f.txt test.txt
[root@oldboyedu ~/test]# mkdir /data/oldboy
[root@oldboyedu ~/test]# ls -l /data
total 0
-rw-r--r--. 1 root root 0 Oct 4 23:28 a.txt
-rw-r--r--. 1 root root 0 Oct 4 23:28 aa.txt
-rw-r--r--. 1 root root 0 Oct 4 23:28 b.txt
-rw-r--r--. 1 root root 0 Oct 4 23:38 c.txt
-rw-r--r--. 1 root root 0 Oct 4 23:38 f.txt
drwxr-xr-x. 2 root root 6 Oct 5 01:08 oldboy
-rw-r--r--. 1 root root 0 Oct 4 23:28 test.txt
[root@oldboyedu ~/test]# ls -l /data|grep "^d"
drwxr-xr-x. 2 root root 6 Oct 5 01:08 oldboy
特殊预定义中括号表达式
[root@oldboyedu ~/test]# egrep "[0-9]" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]#
[root@oldboyedu ~/test]# egrep "[[:digit:]]" oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu ~/test]# egrep "[[:lower:]]" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# egrep "[[:upper:]]" oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~/test]# egrep "\boldboy\b" oldboy.txt
I am oldboy teacher!
[root@oldboyedu ~/test]# egrep "oldboy" oldboy.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
[root@oldboyedu ~/test]# egrep -w "oldboy" oldboy.txt
I am oldboy teacher!
三剑客:grep sed(Stream editor 流编辑器)awd
Sed:是操作、过滤和转换文本内容的强大工具。
常用功能有对文件实现快速增删改查(增加、删除、修改、查询),
其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。
sed [选项] [sed内置命令字符] [文件]
选项:
-n 取消默认sed的输出,常与sed内置命令的p连用※
-i 直接修改文件内容,而不是输出到终端。
如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※
ed的内置命令字符说明
s替换
g全局global
p打印print
d删除delete
问题1:输出oldboy.txt的第2-3行内容※。
root@guohaoxiang~/test]# sed -n '2,3p' oldboy.txt #<==n
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
问题2;过滤出含有oldboy的字符
[root@guohaoxiang~/test]# sed -n '/oldboy/p' oldboy.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
问题3:删除含有oldboy字符串的行
[root@guohaoxiang~/test]# sed '/oldboy/d' oldboy.txt
I like badminton ball ,billiard ball and chinese chess!
my qq num is 49000448.
问题3:将文件中的oldboy字符串全部替换为oldgirl
Vim替换:
sed "s/oldboy/oldgirl/ig" test.txt
Sed ‘s#像替换什么#用什么替换#g’ oldgirl.Txt
问题4:将文件zho将文件中的oldboy字符串全部替换为oldgirl同时将qq号码49000448改为12345678
[root@guohaoxiang~/test]# sed -e 's#oldboy#oldgirl#g' -e 's#49000448#12340569#g' oldboy.txt
I am oldgirl teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldgirledu.com
my qq num is 12345678.