• 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

     

     

     

     

     

     

     

  • 相关阅读:
    114. Flatten Binary Tree to Linked List
    odoo docker环境下将日志存储在数据库中ir_logging
    odoo 日志切割存储,日志存储到数据库中
    odoo 通过nginx反向代理后获取真实IP地址
    html样式超出长度部分使用省略号显示
    vim 查找字串所在的位置
    系统重启 后 Docker服务及容器自动启动设置
    字串格式化换format使用
    markdown 测试代码高亮
    协程与线程的简单区分
  • 原文地址:https://www.cnblogs.com/wenyule/p/7683646.html
Copyright © 2020-2023  润新知