• Linux 基础正则表达式和扩展正则表达式


    基础正则表达式:

    ^   第1个符号 ,以什么什么开头   ^m

    $  第2个符号,以什么什么结尾  m$    ,还表示空行,或空格,可以用cat  -An 试一下

    ^$ 第3个符号,空行  什么符号都没有

    .  第4个符号,表示任意 “一个字符” 

      第5个符号, 转义字符不解析特殊符号的含义 ,  相当于回车键 ,    相当于tab键

    * 第6个符号,表示前一个字符连续出现了0次或0次以上

    .* 第7个符号,表示任意字符,包括空行,正则表达式表示所有或连续出现的。

    [ ] 第8个符号,中括号,中括号内每次查找一个字符。

    [^] 第9个符号,[^acb] , 表示排除 a,b,c

    扩展正则表达式:

    + 第10个符号,表示前一个字母连续出现1次或1次以上

    扩展正则表达式:

    + 第10个符号,表示前一个字母连续出现1次或1次以上

    |  第11个符号,(竖线)表示  " 或者 "  的意思

    () 第12个符号,(小括号)表示一个整体  反向引用 / 后向引用

    例如:sed  -r   's#(..)(..)(..)#1<(2)>3#g'    ##后向引用

    {} 第13个符号,{n,m} 前一个字符至少连续出现N次,最多连续出现m次

    a{1,10}  ##表示  a最少连续出现1次,最多连续出现10次

    grep 参数:

    -E  等于 egerp

    -n  显示行号

    -i  不区分大小写

    -o 只输出匹配的内容

    sed 参数:

    -n 指定行号

    -r 支持扩展正则表达式

    's#123#456#g' 表示把123 替换成456

    awk 参数:

    -F 指定分隔符

    NR 表示行号

    $ 表示取某一列

    练习题1:用sed或awk取出服务器eth0的IP地址。

    1、用sed取出服务器eth0的ip地址

    [root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服务器的IP

    eth0      Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8  

    inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

    inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

    collisions:0 txqueuelen:1000 

    RX bytes:8342856346 (7.7 GiB)  TX bytes:1103955 (1.0 MiB)

    [root@MB-10-0-0-200 ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*).*Bcast.*$#1#gp'  ### 1 表示前一个()内的内容,就是我们要取出的内容

    192.168.11.138 

    ###############备注######################

    |sed -nr '2s#^.*addr:(.*).*Bcast.*$#1#gp'   等于  |sed -n 2p|sed -r 's#^.*addr:(.*).*Bcast.*$#1#g' 

    #########################################

    2、用awk取出服务器eth0的ip地址

    [root@MB-10-0-0-200 ~]# ifconfig eth0 ###查看服务器的IP

    eth0    Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8  

    inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

    inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

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

    collisions:0 txqueuelen:1000 

    RX bytes:8347065816 (7.7 GiB)  TX bytes:1104075 (1.0 MiB)

    [root@MB-10-0-0-200 ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}' ###注意:'[ :]' 中括号内一个字符是空格!!!

    192.168.11.138

    ###############备注######################

    |awk -F '[ :]+' 'NR==2{print $4}' 等于 |awk NR==2|awk -F '[ :]+' '{print $4}'

    #########################################

    练习题2:用awk或sed 取出 /etc/hosts 文件的权限(以数字的形式显示)

    1、用awk取 /etc/hosts 文件的权限

    [root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644

      File: `/etc/hosts'

      Size: 476        Blocks: 8          IO Block: 4096   regular file

    Device: 802h/2050d Inode: 786460      Links: 1

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

    Access: 2018-04-05 17:00:16.938264330 +0800

    Modify: 2018-04-05 16:59:22.926263885 +0800

    Change: 2018-04-05 16:59:22.926263885 +0800

    [root@MB-10-0-0-200 ~]# stat /etc/hosts|awk -F '[(/]' 'NR==4{print $2}' ###以(和/ 为分隔符,将第四行的第二列取出

    0644

    ###############备注######################

    |awk -F '[(/]' 'NR==4{print $2}' 等于 |awk NR==4|awk -F '[(/]' '{print $2}'

    #########################################

    2、用sed取 /etc/hosts 文件的权限

    [root@MB-10-0-0-200 ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644

      File: `/etc/hosts'

      Size: 476        Blocks: 8          IO Block: 4096   regular file

    Device: 802h/2050d Inode: 786460      Links: 1

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

    Access: 2018-04-05 17:00:16.938264330 +0800

    Modify: 2018-04-05 16:59:22.926263885 +0800

    Change: 2018-04-05 16:59:22.926263885 +0800

    [root@MB-10-0-0-200 ~]# stat /etc/hosts|sed -nr '4s#^.*(('[0-9]+')/-.*$#1#gp' ### 1 表示前一个()内的内容,就是我们要取出的内容

    0644 ### ( 表示取消 ( 的特殊含义

    ###############备注######################

    |sed -nr '4s#^.*(('[0-9]+')/-.*$#1#gp' 等于 |sed -n 4p|sed -r 's#^.*(('[0-9]+')/-.*$#1#g'

    #########################################

  • 相关阅读:
    小公司的技术分享怎么搞
    当他们说「独立思考」时,到底在说什么
    java使用tika批量识别文件的真实mime类型
    hibernate:Not all named parameters have been
    mybatis出错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.yyy.dao.ProjectMapper.getById
    Mysql Hibernate报错
    tomcat中多个端口部署项目
    Windows Server 2012多个winlogon.exe LogonUI.exe dwm.exe ChsIME.exe进程
    springboot使用profile指定不同配置(尚硅谷)
    springboot配置文件占位符(尚硅谷)
  • 原文地址:https://www.cnblogs.com/zack001/p/9279252.html
Copyright © 2020-2023  润新知