第一章
1.1正则表达式
1、作用和特殊字符一样。
正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。
开发者:
假设“@”代表“i am”。“!”代表“oldboy”,
则执行echo“@!”的结果就是输出“i am oldboy”。
2、提高效率,快速获取到想要的内容。
3、适用于三剑客命令 grep(egrep),sed,awk
以行为单位处理。
4、实践来讲解
易混淆事项:
a、和通配符区别
b、开发人员正则,一般是perl兼容正则表达式。
c、linux系统三剑客正则表达式。*****
环境准备:
export LC_ALL=C
分类:
1、BRE 基本正则表达式 grep
^... 以...开头,^oldboy 以oldboy开头。
...$ 以...结尾, oldboy$ 以oldboy结尾。
^$ 空行。
. 匹配任意一个且只有一个字符,和通配符?一样。
\让有意义的字符 脱掉马甲 还原本义。
[root@shizhenghao ~/test]# grep "\.$" oldboy.txt
I teach linux.
my qq num is 49000448.
not 4900000448.
* 重复前面字符0次或多次。
.* 表示所有内容
^.* 以任意多个字符开头的内容
.*$ 以任意多个字符结尾的内容
【abc】 匹配任意一个字符a或b或c;也可写成【a-c】
【^abc】匹配不包含^后的任意字符a或b或c
[root@shizhenghao /test]# mkdir -p /data/oldboy
[root@shizhenghao /test]# ls -l /data/
total 0
drwxr-xr-x 2 root root 6 Mar 19 17:16 oldboy
[root@shizhenghao /test]# ls -l /data/|grep "^d"
drwxr-xr-x 2 root root 6 Mar 19 17:16 oldboy
2、ERE扩展正则表达式 egrep
+匹配前一个字符1次或1次以上
【:/】+ 匹配括号内的:或/字符1次或1次以上
?匹配前一个字符0次或1次
es? e es
es* e es ess essssss essssssssss
| 同时匹配多个字符串
[root@shizhenghao ~/test]# egrep "oldboy|like" oldboy.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
()分组过滤括号起来的东西表示一个整体
\n 引用前面()的内容,例如:(aa)\1,匹配aaaa
a{n,m}匹配前一个字符最少n次,最多m次
a{n,}匹配前一个字符最少n次
a{n}匹配前一个字符正好n次
a{,m}匹配前一个字符最多m次
元字符:
\b 匹配单词边界,类似grep -w
[root@shizhenghao ~/test]#egrep "\boldboy\b" oldboy.txt
I am oldboy teacher!
\d 匹配单个数字字符,注意,这个表达式需要使用grep -P参数才能识别
[root@shizhenghao ~/test]# grep -P "\d" oldboy.txt
my qq num is 49000448.
not 4900000448.
第二章 linux三剑客
sed :stream editor 流编辑器
语法格式:
sed [参数] [sed内置命令字符] [文件]
-n 取消命令默认输出,常与内置命令p连用
-i 直接修改文件内容,而不是输出到终端
-e 允许多次编辑
sed的内置命令字符说明
s 替换 ,常与g匹配做全局的替换
g 全局global
p 打印print,常与参数-n 一起使用
d 删除delete
过滤出带有oldboy的行:
[root@shizhenghao ~/test]# grep "oldboy" oldboy.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
[root@shizhenghao ~/test]# sed -n '/oldboy/p' oldboy.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
删除带有oldboy字符串的行:
[root@shizhenghao ~/test]# sed '/oldboy/d' oldboy.txt
I like badminton ball ,billiard ball and chinese chess!
my qq num is 49000448.
加-i 修改内容是直接修改文件内容
-e 可一条命令多次编辑
[root@shizhenghao ~/test]# sed -e 's#oldboy#oldgirl#g' -e 's#49000448#31333741#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 31333741.