第十一章 [endif]Linux正则表达式与三剑客知识应用实践
1、什么是正则表达式:
作用和特殊字符一样
正则表达式是为处理大量的字符串及文本而定义的一套规则和方法
假设@代表“i am”, “!”代表“oldboy”
则执行ceho“@!”就表示输出“i am oldboy”
2、提高效率,快速获取到想要的内容
3、适用于三剑客命令:grep(egrep), sed ,awk
以行为单位处理,
4、实践讲解
易混淆事项
1、 和通配符区别
2、和开发正则有区别。一般是perl兼容正则表达式。
3、 Linux系统三剑客
环境准备:
export LC_ALL=C
分类
1、BRE grep
2、GRE 加-E或egrep
Test目录输入这些进行环境准备
mkdir ~/test -pcat >~/test/oldboy.txt<<EOF
I am oldboy teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!our site is http://www.oldboyedu.commy qq num is 49000448.not 4900000448.my god ,i am not oldbey,but OLDBOY!EOF
ls -lF /data|grep “/$”查找斜线结尾
cat oldboy.txt -n (显示行号查找)
Linux 正则符号释义
基本正则:grep开头搜索等
^尖角号 以。。。开头 ^oldboy 以oldboy开头
$美元符 以。。。结尾 oldboy$ 以oldboy结尾
^$ 空行 以开头结尾,以结尾开头
. 匹配任意一个且只有一个字符 和通配符?含义一样
\ 让更有意义的字符脱掉马甲,还原本意
* 重复前面字符0次或多次
.* 表示所有内容
^.* 组合符 匹配以任意多个字符开头的内容
.*$ 以任意0个字符或多个字符结尾
[abc] 匹配[]集合内的任意一个字符a或b或c;[abc]可以写成[a-c]
[^abc] 匹配不包含^后的任意字符a或b或c
扩展正则(GRE) 加-E或egrep:
+ 匹配前一个字符一次或多次
[:/]+ 匹配括号内:或/字符1次或1次以上
?匹配一个字符0次或1次
| 或者同时过滤多个字符串
a{n,m} 匹配前a字符最少n次,最多m次
a{n,} 匹配前a字符最少n次
a{n} 匹配前a字符正好n次
a{,m} 匹配前a字符最多m次
()分组过滤被括起来的东西表示一个整体
\n引用前面()小括号里的内容,例如:(aa)、1,匹配aaaa
特殊符号中括号
[:alnum:] 匹配任意一个字母或数字字符,相当于[a-zA-Z0-9] [[:alnum:]]
元字符:
\b 只匹配单词 相当于grep -w 过滤单词
-d 匹配单个数字字符(需用grep -p)
sed:流编辑器(三剑客之老二)
老大awk老二 sed 老三grep
Sed是操作、过滤、和转换文本内容的强大工具
命令格式:
sed [选项] [sed内置命令字符] [输入文件]
选项:
-n 取消默认sed输出,常与sed
-i 直接修改文件的内容,而不是输出到终端
内置命令字符说明
s 替换
g 全局global
p 打印 peint
d删除 delete
问题1:输出oldboy.txt的第2-3行内容※。打印行
[root@liutengda58~/test]# sed -n '2,3p' oldgirl.txt
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
问题二过滤出含有oldboy字符串的行
用grep过滤:
[root@liutengda58 ~/test]# grep oldboy oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
用sed过滤:
[root@liutengda58~/test]# sed -n '/oldboy/p' oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
问题三:删除oldboy字符串的行
[root@liutengda58~/test]# sed ‘/oldboy/d’ oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
问题四:讲oldboy字符串全部替换为oldgril
Vim替换:
:%s/oldboy/oldgirl/g
Sed:
Sed‘s#想替换啥#用啥换#g' 文件名
[root@liutengda58~/test]# sed 's#oldboy#oldgirl#g' oldgirl.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 49000448.
问题五:将文件中的oldboy字符串全部替换为oldgirl 同时将123515替换成123144
连续替换
Sed -e ‘s#oldboy#oldgirl#g’ -e ‘s#123515#123144#g’ oldboy.txt