zoukankan      html  css  js  c++  java
  • 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 I 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 I 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.

  • 相关阅读:
    如何导出和导入mysql数据(数据迁移)
    C# exe dll防止反编译-- dotNET_Reactor
    C#防止反编译
    WCF异常相关
    了解WCF的前世今生之实现服务端(一)
    svn忽略文件后缀
    马云给年轻人的10句忠告 真的后悔才看到!
    如何利用好清晨与夜间的时间?
    浙江旅游好去处
    突然觉得生活好累......
  • 原文地址:https://www.cnblogs.com/jazzxs/p/9177844.html
Copyright © 2011-2022 走看看