1.1 Linux正则表达式,Linux正则表达式用于三剑客(grep,sed,awk)
1.1.1 正则表达式解释
什么是正则?
Linux正则表达式是事先设定一些规则,例如:用特殊符号,指定好每个特殊符号的意义。
使用特殊符号时,就使用了特殊符号表达的意义了
1.1.2 正则作用及特点
作用:过滤,查找文件内容等等,内容多且杂,有了正则表达式,让我们更快的找到想要的内容。
特点:
1,正则为处理大量文本/字符串而定义的一套规则和方法。
2,正则以行为单位处理,一次处理一行。
3,正则在运维工作中会经常在文件中找你想要的内容,
4,通过正则可以化繁为简,提高我们的效率。
5,Linux里面最常用的三剑客(grep,sed,awk)都支持正则。
1.1.3 学习正则表达式注意事项
1,linux正则表达式是按照行为单位处理的。
2,学习正则我们使用grep和egrep命令,一定要给他们加上一个别名,高亮显示。
alias egrep='egrep --color=auto' alias grep='grep --color=auto'
3,注意字符集,使用LC_ALL=C,但是刚开始的时候一般不会有问题的
1.1.4 基本正则表达式
符号 | 作用 |
^odlboy | 以oldboy开头 |
oldboy$ | 以oldboy结尾 |
^$ | 空行 |
* | 重复前一个字符0到多次 |
. | 代表任意一个字符 |
\ | 转义字符,让有意义的字符,没意义(只表示本身) |
.* | 表示所有 |
[abc] | 匹配[]集合内的任意一个字符a或b或c;[abc]也可写成[a-c] |
[^abc] | 匹配不包含^后的任意字符a或b或c,这里的^表示对[abc]的取反 |
实例1-1
[root@oldboy test]# grep -n "^I" oldboy.txt 《《==显示oldboy文件里以I开头的行
1 I am oldboy teacher!
2 I teach linux
4 I like badminton ball ,billiard ball and chinese chess!
[root@oldboy test]# grep "com$" oldboy.txt 《《==显示oldboy文件里以com结尾的行
our site is http://www.oldboyedu.com
[root@oldboy test]# grep -n "^$" oldboy.txt 《《==显示oldboy文件里空行
3:
7:
[root@oldboy test]# grep "00*" oldboy.txt 《《==显示oldboy文件一个以上0的行
my qq num is 49000448.
not 4900000448.
[root@oldboy test]# grep -n "." oldboy.txt 《《==显示oldboy文件任意一个字符,不包含空行
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:our site is http://www.oldboyedu.com
6:my qq num is 49000448.
8:not 4900000448.
9:my god ,i am not oldbey,but OLDBOY!
[root@oldboy test]# grep -n ".$" oldboy.txt 《《==以任意单个字符结尾
[root@oldboy test]# grep -n "\.$" oldboy.txt 《《==显示oldboy文件以.结尾的行
2:I teach linux.
6:my qq num is 49000448.
8:not 4900000448.
[root@oldboy test]# grep ".*" oldboy.txt 《《==显示oldboy文件所有字符,包括空行
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@oldboy test]# grep "[abc]" oldboy.txt 《《==显示任何含有a或 b或 c 字母的行
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboy test]# grep "[^abc]" oldboy.txt 《《==显示不包含a或b或c的行
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!
1.1.5 扩展正则表达式
grep -E==egrep==grep \+
字符 | 作用 |
+ | 匹配前一个字符1次或1次以上 |
[:/]+ | 匹配括号内的:或/字符1次或1次以上 |
? | 匹配前一个字符0次或1次,表示所有 |
| | 表示或者,即同时过滤多个字符串 |
() | 后向引用,前面用小括号括起来的内容,后面可以用\1再取出来 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次 |
实例1-2
[root@oldboy test]# egrep "4+" oldboy.txt 《《==显示1个或1个以上带4字符的行
my qq num is 49000448.
not 4900000448.
[root@oldboy test]# egrep "[:/]+" oldboy.txt 《《==显示1个或1个以上带:或/的行
our site is http://www.oldboyedu.com
[root@oldboy test]# egrep "[:/]?" oldboy.txt 《《==显示0或1个:或/的行
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@oldboy test]# egrep "448|oldboy" oldboy.txt 《《==显示带448或oldboy字符的行
I am oldboy teacher!
our site is http://www.oldboyedu.com
my qq num is 49000448.
not 4900000448.
[root@oldboy test]# egrep "(0)\1" oldboy.txt 《《==显示两个0的行
my qq num is 49000448.
not 4900000448.
[root@oldboy test]# grep "[a-z0-9A-Z]" 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!
1.2 sed :字符流编辑器 Linux三剑客老二
sed功能:增加,修改,删除,查询,过滤
用法:sed [选项] [sed内置命令字符] 文件
选项 | 作用 |
-n | 取消默认输出,常与sed内置命令的p连用※ |
-i | 直接修改文件内容,而不是输出到终端。 如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※ |
-e | 允许多次编辑 |
[sed内置命令字符]
内置字符 | 作用 |
na | 全拼append,表示追加文本>>,在n行后添加一行或多行文本 |
d | 全拼delete,表示匹配行的文本 |
ni | 全拼insert,表示插入文本,在n行前添加一行或多行文本※ |
p | 全拼print,表示打印匹配行的内容,通常p会与选项-n一起使用※ |
s/A / B/g | 匹配A部分内容用B替换A匹配的内容,A部分可使用正则表达式 |
实例1-3
[root@oldboy test]# cat -n oldboyedu.txt
1 I am oldboy teacher!
2 I like badminton ball ,billiard ball and chinese chess!
3 our site is http://www.oldboyedu.com
4 my qq num is 49000448.
问题1:查询2-3行
方法1:
[root@oldboy test]# sed -n '2,3p' oldboyedu.txt
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
方法2:
[root@oldboy test]# head -3 oldboyedu.txt|tail -2
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
问题2、查询不连续的行。
[root@jz ~]# sed -n '1p;2p;4p' oldboyedu.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my qq num is 49000448.
问题3:过滤出含有oldboy字符串的行
方法1:
[root@oldboy test]# grep "oldboy" oldboyedu.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
方法2:
[root@oldboy test]# sed -n '/oldboy/p' oldboyedu.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
问题4:删除含有oldboy字符串的行
[root@oldboy test]# sed '/oldboy/d' oldboyedu.txt
I like badminton ball ,billiard ball and chinese chess!
my qq num is 49000448.
问题5:将文件中的oldboy字符串全部替换为oldgirl
[root@oldboy test]# sed 's#oldboy#oldgirl#g' oldboyedu.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.
问题6:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741
[root@oldboy test]# sed -e 's#oldboy#oldgirl#g' -e 's#49000448#31333741#g' oldboyedu.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.
问题7:在oldboy.txt文件第2行后追加文本
[root@oldboy test]# sed '2a I am olgirl\nI like oldboy' oldboyedu.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
I am olgirl
I like oldboy
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题8:在文件第2行前插入文本
[root@oldboy test]# sed '2i I am olgirl\nI like oldboy' oldboyedu.txt
I am oldboy teacher!
I am olgirl
I like oldboy
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
my qq num is 49000448.
问题9:把第三行中的oldboy,替换成xiaoting。
[root@oldboy test]# sed '3s#oldboy#xiaoting#g' oldboyedu.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.xiaotingedu.com
my qq num is 49000448.
问题10:把第1行到第3行中的oldboy,替换成xiaoting。
[root@oldboy test]# sed '1,3s#oldboy#xiaoting#g' oldboyedu.txt
I am xiaoting teacher!
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.xiaotingedu.com
my qq num is 49000448.