zoukankan      html  css  js  c++  java
  • shell编程系列16--文本处理三剑客之awk模式匹配的两种方法

    shell编程系列16--文本处理三剑客之awk模式匹配的两种方法
    
    
    awk的工作模式
    
    第一种模式匹配:RegExp
    
    第二种模式匹配:关系运算匹配
    
    
    用法格式对照表
    
    语法格式    含义
    RegExp        按正则表达式匹配
    关系运算    按关系运算匹配
    
    awk模式匹配用法总结:
        第一种方法:RegExp
        第二种方法:运算符匹配
    
        1、RegExp
            匹配/etc/passwd文件行中含有root字符串的所有行
                awk 'BEGIN{FS=":"}/root/{print $0}' passwd
            匹配/etc/passwd文件行中以nginx开头的所有行
                awk '/^nginx/{print $0}' passwd
    
        2、运算符匹配
            关系运算符匹配:
                <    小于
                >    大于
                <=    小于等于
                >=    大于等于
                ==    等于
                !=    不等于
                ~    匹配正则表达式
                !~    不匹配正则表达式
    
            (1)、以:为分隔符,匹配/etc/passwd文件中第3个字段小于50的所有行信息
                awk 'BEGIN{FS=":"}$3<50{print $0}' passwd
    
            (2)、以:为分隔符,匹配/etc/passwd文件中第3个字段大于50的所有行信息
                awk 'BEGIN{FS=":"}$3>50{print $0}' passwd
    
            (3)、以:为分隔符,匹配/etc/passwd文件中第7个字段为/bin/bash的所有行信息
                awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd
                
            (4)、以:为分隔符,匹配/etc/passwd文件中第7个字段不为/bin/bash的所有行信息
                awk 'BEGIN{FS=":"}$7!="/bin/bash"{print $0}' passwd
            
            (5)、以:为分隔符,匹配/etc/passwd文件中第3个字段包含3个数字以上的所有行信息
                awk 'BEGIN{FS=":"}$3 ~ /[0-9]{3,}/{print $0}' passwd 
    
            布尔运算符匹配:
                ||&&!    非
        
            (1)、以:为分隔符,匹配/etc/passwd文件中包含ftp或mail的所有行信息
                awk 'BEGIN{FS=":"}$1=="ftp" || $1=="mail"{print $0}' passwd
            (2)、以:为分隔符,匹配/etc/passwd文件中第3个字段小于50并且第4个字段大于50的所有行信息
                awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' passwd
    
    
    # 模式匹配
    # 没有使用 /RegExp/ 匹配模式的时候处理所有的行,使用了匹配模式就只处理匹配到的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}/^nginx/{print $0}' passwd 
    nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
    
    # 关系运算符,uid 等于1的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}$3==1{print $0}' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    [root@localhost shell]# awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd 
    root:x:0:0:root:/root:/bin/bash
    ajie:x:1000:1000:ajie:/home/ajie:/bin/bash
    deploy:x:1001:1001::/home/deploy:/bin/bash
    
    # 匹配uid为3位及以上的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' passwd 
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    ajie:x:1000:1000:ajie:/home/ajie:/bin/bash
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    deploy:x:1001:1001::/home/deploy:/bin/bash
    nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
    
    # 正则匹配nginx开头的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}$1~/^nginx/{print $0}' passwd 
    nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
    
    # 匹配到 /sbin/nologin 的行,注意转义
    [root@localhost shell]# awk 'BEGIN{FS=":"}$0~//sbin/nologin/{print $0}' passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
    
    # 没有匹配到/sbin/nologin 的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}$0!~//sbin/nologin/{print $0}' passwd 
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    ajie:x:1000:1000:ajie:/home/ajie:/bin/bash
    deploy:x:1001:1001::/home/deploy:/bin/bash
    
    # 运算和模式匹配混用,找出 uid 小于50,且bash为 /bin/bash 的行
    [root@localhost shell]# awk 'BEGIN{FS=":"}$3<50 && $7~//bin/bash/ {print $0}' passwd 
    root:x:0:0:root:/root:/bin/bash
  • 相关阅读:
    偶遇this之坑
    程序员的职业素养——读后感
    我怎么没想到——读后感
    黑客与画家——读后感
    漫谈认证与授权
    动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化
    动手造轮子:实现简单的 EventQueue
    asp.net core 自定义 Policy 替换 AllowAnonymous 的行为
    SQL Server 中 `JSON_MODIFY` 的使用
    WeihanLi.Npoi 近期更新
  • 原文地址:https://www.cnblogs.com/reblue520/p/10984762.html
Copyright © 2011-2022 走看看