• 正则


    grep命令

    是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

    1.grep命令

    2. -c 查看行数

    [root@bogon grep]# grep -c 'nologin' passwd 
    41
    [root@bogon grep]# 
    

    3.-n显示行号

    4.-i不区分大小写

    5.-v取反,就是除了匹配的行剩下的显示出来

    [root@bogon grep]# grep -vni 'nologin' passwd 
    1:root:x:0:0:root:/root:/bin/bash
    6:sync:x:5:0:sync:/sbin:/bin/sync
    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8:halt:x:7:0:halt:/sbin:/sbin/halt
    44:sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
    [root@bogon grep]# 
    

    6.-r 遍历所有子目录

    7.-A指定列出查找到行的下面两行 -B指定列出查找到行的上面两行  -C 指定列出查找到行的上下两行

    [root@bogon grep]# grep -A2 'nologin' passwd 
    

    8.[root@bogon grep]# grep [0-9] passwd  匹配数字

    9.^以什么开头

    [root@bogon grep]# grep -n '^a' passwd     
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    18:abrt:x:173:173::/etc/abrt:/sbin/nologin
    34:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    41:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    [root@bogon grep]# 
    

    10..匹配任意一个字符

    [root@bogon grep]# grep -n 'a.t' passwd    
    8:halt:x:7:0:halt:/sbin:/sbin/halt
    24:saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    27:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
    34:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    [root@bogon grep]# 
    

    11.*匹配前面的子表达式0或多次

    12.{} 匹配次数,用egrep就不用转译了或者用grep -E

    12.+匹配前面的子表达式一次或多次

    12.?匹配前面的子表达式零次或一次

     

    13.| 或者

    sed命令

    https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html 

    是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    sed 可以实现 grep的功能,还可以替换文件内容
    1.sed匹配字符串,p打印,-n 只显示匹配的行,不加-n会把所有的行都显示出来

    [root@bogon sed]# sed -n '/root/'p passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@bogon sed]# 

    2.sed也支持. * +

    [root@bogon sed]# sed -n '/r.t/'p passwd 
    operator:x:11:0:operator:/root:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    [root@bogon sed]#

    3.匹配+号需要转译或者加r选项

    [root@bogon sed]# sed -n '/o+t/'p passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    [root@bogon sed]# sed -nr '/o+t/'p passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    [root@bogon sed]# 

    4.sed支持{} | 

    [root@bogon sed]# sed -nr '/o{2}/'p passwd 
    root:x:0:0:root:/root:/bin/bash
    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
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    [root@bogon sed]#
    
    [root@bogon sed]# sed -nr '/root|bash/'p passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
    [root@bogon sed]# 

    5.sed打印指定的行(打印第2行)

    [root@bogon sed]# sed -n '2'p passwd 
    bin:x:1:1:bin:/bin:/sbin/nologin
    [root@bogon sed]# 

    6.sed打印2-5行

    [root@bogon sed]# sed -n '2,5'p 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
    [root@bogon sed]# 

    7.sed 打印2到行尾

    [root@bogon sed]# sed -n '2,$'p passwd 

    8.sed 打印全部行

    [root@bogon sed]# sed -n '1,$'p passwd 

    9.sed -e直接在命令列模式上进行 sed 的动作编辑;匹配第一行并且匹配bus

    [root@bogon sed]# sed -e '1'p -e '/bus/'p -n passwd 
    root:x:0:0:root:/root:/bin/bash
    systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    [root@bogon sed]#

     10.sed不区分大小写匹配 + 大写的 i

    [root@bogon sed]# sed -n '/bus/'p passwd 
    systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    [root@bogon sed]# sed -n '/bus/'Ip passwd  
    systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    [root@bogon sed]# 
    

    11.sed删除匹配的行+i 选项是真删除了,不加i只是在屏幕上显示效果(删除前两行)

    [root@bogon sed]# sed -i '1,2'd passwd 
    

    12.sed将root相关的行删掉

    [root@bogon sed]# sed -i '/root/'d passwd
    

    13.sed替换功能将1-10行的root全部替换成toor

    [root@bogon sed]# sed '1,10s/root/toor/g' passwd
    toor:x:0:0:toor:/toor:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    

    14.sed支持正则替换将roo替换成r

    [root@bogon sed]# sed -r '1,10s/ro+/r/g' passwd     
    rt:x:0:0:rt:/rt:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    

    15.将第一段和最后一段调换位置

    [root@bogon sed]# head passwd
    root:x:0:0:root:/root:/bin/bash
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@bogon sed]# head passwd |sed -r 's/([^:]+):(.*):([^:]+)/3:2:1/'
    /bin/bash:x:0:0:root:/root:root
    /sbin/nologin:x:1:1:bin:/bin:bin
    /sbin/nologin:x:2:2:daemon:/sbin:daemon
    /sbin/nologin:x:3:4:adm:/var/adm:adm
    /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
    /bin/sync:x:5:0:sync:/sbin:sync
    /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
    /sbin/halt:x:7:0:halt:/sbin:halt
    /sbin/nologin:x:8:12:mail:/var/spool/mail:mail
    /sbin/nologin:x:11:0:operator:/root:operator
    [root@bogon sed]# 
    

    16.将所有的英文字母替换掉

    [root@bogon sed]# head passwd |sed 's/[a-zA-Z]//g'
    ::0:0::/://
    ::1:1::/://
    ::2:2::/://
    ::3:4:://://
    ::4:7::///://
    ::5:0::/://
    ::6:0::/://
    ::7:0::/://
    ::8:12::///://
    ::11:0::/://
    [root@bogon sed]# 

     17.给所有的行前面加上aaa

    [root@bogon sed]# head passwd |sed -r 's/(.*)/aaa:&/'
    aaa:root:x:0:0:root:/root:/bin/bash
    aaa:bin:x:1:1:bin:/bin:/sbin/nologin
    aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
    aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    aaa:sync:x:5:0:sync:/sbin:/bin/sync
    aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    aaa:halt:x:7:0:halt:/sbin:/sbin/halt
    aaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    aaa:operator:x:11:0:operator:/root:/sbin/nologin
    [root@bogon sed]# 
    

    awk命令

    1.支持分段查找(查找以冒号分割开的第一段)

    [root@bogon awk]# awk -F ':' '{print $1}' passwd          
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    

    2.打印所有的段

    [root@bogon awk]# awk -F ':' '{print $0}' passwd  
    
    [root@bogon awk]# awk '{print $0}' passwd 
    

    3.不指定分割符默认以空格分割

    [root@bogon awk]# awk '{print $1}' passwd
    

    4.打印多列

    [root@bogon awk]# awk -F ':' '{print $1,$2,$3}' passwd 
    root x 0
    bin x 1
    daemon x 2
    adm x 3
    lp x 4
    sync x 5

    5.打印结果用#号分割

    [root@bogon awk]# awk -F ':' '{print $1"#"$2"#"$3}' passwd   
    root#x#0
    bin#x#1
    daemon#x#2
    adm#x#3
    lp#x#4
    

    6.查找有oo的行

    [root@bogon awk]# awk '/oo/' passwd 
    root:x:0:0:root:/root:/bin/bash
    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
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    [root@bogon awk]# 
    

    7.匹配第一段包含oo的行

    [root@bogon awk]# awk -F ':' '$1 ~ /oo/' passwd 
    root:x:0:0:root:/root:/bin/bash
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    [root@bogon awk]# 
    

    8.同样支持正则表达式+查找第一行有oo的

    [root@bogon awk]# awk -F ':' '$1 ~ /oo+/' passwd 
    root:x:0:0:root:/root:/bin/bash
    setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
    [root@bogon awk]# 
    

    9.支持多个表达式一起写

    [root@bogon awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $3,$4}' passwd 
    root 0
    operator 11
    59 59
    113 113
    993 76
    75 75
    107 107
    29 29
    [root@bogon awk]# 
    
    [root@bogon awk]# grep -E 'root|user' passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    radvd:x:75:75:radvd user:/:/sbin/nologin
    qemu:x:107:107:qemu user:/:/sbin/nologin
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    [root@bogon awk]# 
    
    [root@bogon awk]# awk -F ':' '/root|user/ {print $0}' passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    radvd:x:75:75:radvd user:/:/sbin/nologin
    qemu:x:107:107:qemu user:/:/sbin/nologin
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    [root@bogon awk]# 
    

    10.查找第三段等于0的

    [root@bogon awk]# awk -F ':' '$3==0' passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@bogon awk]# 
    

    11.就要第一段(注意:数字比较的时候不要加双引号)

    [root@bogon awk]# awk -F ':' '$3==0 {print $1}' passwd  
    root
    [root@bogon awk]# 
    

    12.大于等于

    [root@bogon awk]# awk -F ':' '$3>=1000 {print $1}' passwd 
    nfsnobody
    sunyujun
    mysql
    www
    [root@bogon awk]# 
    
    [root@bogon awk]# awk -F ':' '$3>=1000 {print $0}' passwd  
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
    mysql:x:1001:1001::/home/mysql:/sbin/nologin
    www:x:1002:1002::/home/www:/sbin/nologin
    [root@bogon awk]# 

    13.不等于

    [root@bogon awk]# awk -F ':' '$7!="/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
    sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
    [root@bogon awk]# 
    

    14.变量比较

    [root@bogon awk]# awk -F ':' '$3<$4' passwd  
    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
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@bogon awk]# 
    

    15.&& 比较

    [root@bogon awk]# awk -F ':' '$3>"5" && $3<"7"' passwd    
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    [root@bogon awk]# 
    

    16. ||

    [root@bogon awk]# awk -F ':' '$3>2500 || $7=="/sbin/nologin"' passwd 
    

    17.~匹配 第七段包含/sbin/nologin的或者第三段大于2000的

    [root@bogon awk]# awk -F ':' '$3>2000 || $7 ~ /sbin/nologin' passwd     
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    [root@bogon awk]# 
    

    18.OFS 定义打印的分隔符

    [root@bogon awk]# awk -F ':' '{OFS="#"} $3>2000 || $7 ~ /sbin/nologin {print $1}' passwd  
    nfsnobody
    [root@bogon awk]# 
    

    19.if判断

    [root@bogon awk]# awk -F ':' '{OFS="#"} {if ($3 > 1000) {print $1,$2}}' passwd 
    nfsnobody#x mysql#x www#x [root@bogon awk]#

    20.NR 标示行号

    [root@bogon awk]# awk -F ':' '{print NR":"$0}' passwd 
    1:root:x:0:0:root:/root:/bin/bash
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6:sync:x:5:0:sync:/sbin:/bin/sync
    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8:halt:x:7:0:halt:/sbin:/sbin/halt
    9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10:operator:x:11:0:operator:/root:/sbin/nologin
    11:games:x:12:100:games:/usr/games:/sbin/nologin
    12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    

    21.NF显示有多少段

    [root@bogon awk]# awk -F ':' '{print NF":"$0}' passwd                           
    7:root:x:0:0:root:/root:/bin/bash
    7:bin:x:1:1:bin:/bin:/sbin/nologin
    7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    7:adm:x:3:4:adm:/var/adm:/sbin/nologin
    7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    7:sync:x:5:0:sync:/sbin:/bin/sync
    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    7:halt:x:7:0:halt:/sbin:/sbin/halt
    7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    7:operator:x:11:0:operator:/root:/sbin/nologin
    

    22.打印前十行

    [root@bogon awk]# awk -F ":" 'NR<=10' passwd 
    root:x:0:0:root:/root:/bin/bash
    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
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@bogon awk]# 
    

    23..打印前十行并且包含root或者sync

    [root@bogon awk]# awk -F ":" 'NR<=10 && $1 ~ /root|sync/' passwd  
    root:x:0:0:root:/root:/bin/bash
    sync:x:5:0:sync:/sbin:/bin/sync
    [root@bogon awk]# 

    24.NF=6

    [root@bogon awk]# awk -F ":" 'NF=6 && $1 ~ /root|sync/' passwd      
    root
    sync
    [root@bogon awk]# 
    

    25. $NR":"$NF

    [root@bogon awk]# awk -F ":" '{print $NR":"$NF}' passwd                         
    root:/bin/bash
    x:/sbin/nologin
    2:/sbin/nologin
    4:/sbin/nologin
    lp:/sbin/nologin
    /sbin:/bin/sync
    /sbin/shutdown:/sbin/shutdown
    :/sbin/halt
    :/sbin/nologin
    :/sbin/nologin
    :/sbin/nologin
    :/sbin/nologin
    :/sbin/nologin
    

    26.$1赋值操作

    [root@bogon awk]# head -n 3 /etc/passwd |awk -F ':' '$1="root"'
    root x 0 0 root /root /bin/bash
    root x 1 1 bin /bin /sbin/nologin
    root x 2 2 daemon /sbin /sbin/nologin
    [root@bogon awk]# 
    

    27.第三列循环求和

    [root@bogon awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd 
    82198
    [root@bogon awk]# 

     

      

     

     

     

  • 相关阅读:
    MySQL的char和varchar针对空格的处理
    单KEY业务,数据库水平切分架构实践
    接口测试学习笔记1-接口测试的用例设计
    Robot Framework源码解析(2)
    Robot Framework 源码解析(1)
    Python学习笔记1 -- TypeError: 'str' object is not callable
    OKHttp源码学习同步请求和异步请求(二)
    OKHttp源码学习--HttpURLConnection HttpClient OKHttp Get and post Demo用法对比
    Javapoet源码解析
    Universal-Image-Loader源码解解析---display过程 + 获取bitmap过程
  • 原文地址:https://www.cnblogs.com/sunyujun/p/8193750.html
Copyright © 2020-2023  润新知