Linux正则表达式及sed命令

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]

匹配[]集合内的任意一个字符abc[abc]也可写成[a-c]

[^abc]

匹配不包含^后的任意字符abc,这里的^表示对[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.

猜你喜欢

转载自www.cnblogs.com/jazzxs/p/9177844.html