zoukankan      html  css  js  c++  java
  • linux 正则表达式与实践

    正则表达式基础

     

    准备

    (1)alias grep='grep --color=auto' 易于显示

    (2)LC_ALL=C,字符集,设置环境变量,字符顺序

     

    基础正则

    1)^word  匹配以Word开头的内容 vi/vim 里^代表一行的开头

    2)word$  匹配以Word结尾的内容 vi/vim 里$代表一行的结尾

    3)^$    表示空行

    #过滤空行,并显示行号

    [root@wen data]# grep -n "^$" lrs.txt

    2:

    4:

    6:

    8:

    #过滤掉所有空行不显示

    [root@wen data]# grep -v "^$" lrs.txt

    You're in a battle with

    A bulletproof heart

    You really got me, got me

    A bulletproof heart.

     

    4). 代表且只能代表任意一个字符

    5) 转义符号,让特殊字符显示其原型 $ .

    6)* 重复0个或多个前面一个字符,例 o* 匹配 没有o 有一个或多个 oo  oooooo……

    7).* 匹配所有字符 延伸 ^.*以任意多个字符开头  .*$以任意多个字符结尾

    点(.)含义总结

    1.当前目录

    2.使得文件生效 相当于source

    3.隐藏文件

    4.任意一个字符(grep正则)

    #只显示匹配到的内容

    [root@wen data]# grep -on "you" lrs.txt

    9:you

    12:you

     

    8).[abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9]

    9).[~abc]  匹配不包含~后的任意一个字符的内容

                              ~为去反,注意和中括号外面以……开头区别

                              [root@wen data]# grep "[~ot]" lrs.txt

            

    10.a{n,m} 重复n到m次,前一个重复的字符 如果用egrep/sed -r 可以去掉斜线

             a{n,}  重复至少n次,前一个重复字符 如果用egrep或sed -r 可以去掉斜线

             a{n}  重复n次,前一个重复字符  如果用egrep/sed -r 可以去掉斜线

             a{,m}  重复最多m次

    扩展

             11. +  表示 重复一个或一个以上 前面的字符(*是0或多个)

             [root@wen data]# grep -E "on+" lrs.txt

             So if you don't know how to

             I'm not gonna break your fall.

             12. ?  表示 0或一个 前面的字符(.是有且只有一个)

             13. |  表示同时过滤多个字符串

             root@wen data]# grep -E "3306|1521" /etc/services

             mysql 3306/tcp # MySQL

             mysql 3306/udp # MySQL

             ncube-lm 1521/tcp # nCube License Manager

             ncube-lm 1521/udp # nCube License Manager

    14.() 分组过滤,后向引用

             [root@wen data]# grep -E "g(la|oo)d" lrs.txt

             glad

             good

     

            

    #POSIX字符类(了解)

    [:lower:] 匹配小写(麻烦,直接用下面的例子)

             root@wen data]# grep -E "[a-z]" lrs.txt

             You're in a battle with

             A bulletproof heart

             You really got me, got me

             A bulletproof heart.

     

     

    #元字符

     单词边界 只过滤单词

             [root@wen data]# grep -E "you" lrs.txt

             So if you don't know how to

             [root@wen data]# grep -E "you" lrs.txt

             So if you don't know how to

             I'm not gonna break your fall.

     

    #三剑客grep总结

             -a 在二进制文件中,以文本文件的方式搜索数据

             -c 计算找到“搜索字符串”的次数

             -o 仅显示出匹配grep的内容(用于统计出现在文中的次数)

             -i 忽略大小写的不同,所有大小写视为相同

             -n  匹配的内容在其行首显示行号

             -v  反向选择,即显示没有“搜索字符串”内容的那一行

             -E  扩展的grep ,即egrep

             --color=auto  以特定颜色高亮显示匹配关键字

             -C #除了显示匹配行外,显示该行前后的num行

             -B #除了显示匹配行外,显示该行之前的num行

             -A #除了显示匹配行外,显示该行之后的num行   


    正则表达式实战

    一,将第一列与最后一列交换位置

    [root@wen data]# tail /etc/passwd

    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

    abrt:x:173:173::/etc/abrt:/sbin/nologin

    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

    ntp:x:38:38::/etc/ntp:/sbin/nologin

    saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    tcpdump:x:72:72::/:/sbin/nologin

    mygirl:x:500:500::/home/mygirl:/bin/bash

    fadewalk:x:501:501::/home/fadewalk:/bin/bash

     

     

    [root@wen data]# tail /etc/passwd |sed -nr 's#([^:]+)(:.*:)(/.*$)#321#gp'  #第一个([^:])取非:开头的

    /sbin/nologin:x:69:69:virtual console memory owner:/dev:vcsa

    /sbin/nologin:x:173:173::/etc/abrt:abrt

    /sbin/nologin:x:68:68:HAL daemon:/:haldaemon

    /sbin/nologin:x:38:38::/etc/ntp:ntp

    /sbin/nologin:x:499:76:Saslauthd user:/var/empty/saslauth:saslauth

    /sbin/nologin:x:89:89::/var/spool/postfix:postfix

    /sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd

    /sbin/nologin:x:72:72::/:tcpdump

    /bin/bash:x:500:500::/home/mygirl:mygirl

    /bin/bash:x:501:501::/home/fadewalk:fadewalk

     

    二,取IP或数字

    1.取数字

    [root@wen ~]# ifconfig | sed -nr 's#^.*dr:(.*) B.*$#1#gp'

    192.168.59.130

    [root@wen ~]# stat /etc/hosts

    File: "/etc/hosts"

    Size: 158 Blocks: 8 IO Block: 4096 普通文件

    Device: 802h/2050d Inode: 40 Links: 2

    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

    Access: 2017-10-11 20:22:15.436493668 +0800

    Modify: 2010-01-12 21:28:22.000000000 +0800

    Change: 2017-08-30 05:59:08.040858188 +0800

    取出644

    [root@wen ~]# stat /etc/hosts|sed -nr 's#^.*0(.*)/-rw.*$#1#gp'

    644

    [root@wen ~]# stat /etc/hosts|sed -nr 's#^.*(0(.*)/-rw.*$#1#gp'

    644

    2.取IP

    [root@wen data]# ifconfig eth0

    eth0      Link encap:Ethernet  HWaddr 00:0C:29:E9:95:DD 

              inet addr:192.168.59.130  Bcast:192.168.59.255  Mask:255.255.255.0

              inet6 addr: fe80::20c:29ff:fee9:95dd/64 Scope:Link

              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

              RX packets:6964 errors:0 dropped:0 overruns:0 frame:0

              TX packets:4430 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000

              RX bytes:606332 (592.1 KiB)  TX bytes:489934 (478.4 KiB)

     

    [root@wen ~]# ifconfig | sed -n '2s#^.*dr:##p'|sed 's# B.*$##g'

    192.168.59.130

     

     

    grep取IP

    [root@wen ~]# ifconfig eth0 |grep "ddr:[0-9.]*"

              inet addr:192.168.13.128  Bcast:192.168.13.255  Mask:255.255.255.0

              inet6 addr: fe80::20c:29ff:fee9:95dd/64 Scope:Link

    [root@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"

    inet addr:192.168.13.128

    [root@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"|grep -o "[0-9]*"

    192

    168

    13

    128

    [root@wen ~]# ifconfig eth0 |grep -o "inet addr:[0-9.]*"|grep -o "[0-9.]*"

    192.168.13.128

     

     

     

     

     

     

     

  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/wenyule/p/7683646.html
Copyright © 2011-2022 走看看