zoukankan      html  css  js  c++  java
  • 正则表达式sed

    sed  能实现grep查找的功能,还可以替换指定的字符。

     

     

     

    匹配查找文件中root字符(其中的 -n表示段落,p表示打印出来print)

    [root@localhost sed]# sed -n '/root/'p test.txt 

    root:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/root:/sbin/nologin

     

    .点 (匹配任意一个字符)

    [root@localhost sed]# sed  -n '/r.t/'p test.txt 

    operator:x:11:0:operator:/root:/sbin/nologin

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

    *(匹配一个或多个字符)

    [root@localhost sed]# sed -n '/r*t/'p test.txt 

    root:x:0:0:root:/root:/bin/bash

    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    halt:x:7:0:halt:/sbin:/sbin/halt

    operator:x:11:0:operator:/root:/sbin/nologin

    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

    dbus:x:81:81:System message bus:/:/sbin/nologin

    polkitd:x:999:997:User for polkitd:/:/sbin/nologin

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

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

     

    + 加号表示一个或者多个字符

    [root@localhost sed]# sed -n '/r+t/'p test.txt 

    不脱义,需要加一个-r

    [root@localhost sed]# sed -nr '/r+t/'p test.txt 

    [root@localhost sed]# sed -nr '/o+t/'p test.txt 

    root:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/root:/sbin/nologin

    显示第2行内容

    [root@localhost sed]# sed -n '2'p test.txt 

    bin:x:1:1:bin:/bin:/sbin/NOLOGIN

     

     

    显示2到5行

    [root@localhost sed]# sed  -n '2,5'p test.txt 

    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

     

    显示5到后面的行 5,$   ; $表示后面的行

    [root@localhost sed]# sed -n '5,$'p test.txt 

    显示全部内容 1,$

    [root@localhost sed]# sed -n '1,$'p test.txt 

    显示第一行 和 匹配bus字符   用-e 可以执行多步操作   -n是显示段落  p是print打印输出

    [root@localhost sed]# sed -e '1'p -e '/bus/'p  -n test.txt 

    root:x:0:0:root:/root:/bin/bash

    dbus:x:81:81:System message bus:/:/sbin/nologin

     

    显示第一段,匹配root字符,匹配oo字符

    [root@localhost sed]# sed -e '1'p  -e '/root/'p -e '/oo/'p -n test.txt 

    root:x:0:0:root:/root:/bin/bash

    root:x:0:0:root:/root:/bin/bash

    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

    operator:x:11:0:operator:/root:/sbin/nologin

    ooooqq

    osdaoooo

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

    查找bus字符所在的行

    [root@localhost sed]# sed -n '/bus/'p test.txt 

    dbus:x:81:81:System message bus:/:/sbin/nologin

    不区分大小写查找bus字符 (I 表示不区分大小写   grep -i 不区分大小写查找)

    [root@localhost sed]# sed -n '/bus/'Ip test.txt 

    dbus:x:81:81:System message bus:/:/sbin/nologin

    polkitd:x:999:997:User for BUSpolkitd:/:/sbin/nologin

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

     

    删除1,10行,列出剩下的行(d 是delete删除) 不删除原来文件里面的内容,只是

    显示的时候删除1到10行,显示剩下的内容。

    [root@localhost sed]# sed '1,10'd test.txt 

    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:997:User for BUSpolkitd:/:/sbin/nologin

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

    chrony:x:998:996::/var/lib/chrony:/sbin/nologin

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

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

     

     

     

    删除1到25行内容,会删除原文件里面的内容! (-i)

    [root@localhost sed]# sed  -i '1,25'd test.txt 

    删除原文件里面的user2相关的行

    [root@localhost sed]# sed -i '/user2/'d test.txt 

    替换文件中1到10行 root字符替换成toor字符; s表示字符串;g(globle)全局

    [root@localhost sed]# sed '1,10s/root/toor/g' test.txt 

    可以使用正则表达式,将正则表达式的内容进行替换

    替换 ro+ (正则表达式  加号表示1个或者多个字符) 把ro+ 替换为r

     

    [root@localhost sed]# sed  -r '1,10s/ro+/r/g' test.txt |head 

    rt:x:0:0:rt:/rt:/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:/rt:/sbin/nologin

    head 显示

    [root@localhost sed]# head test.txt 

    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

    把第一段跟最后一段替换 (第一段 冒号之前,最后一段 冒号之后)

    [^:]表示非冒号字符,一个字符不是冒号

    +号表示一个或多个字符

    分成3部分

    用反斜杠 3 :表示第3段 ([^:]+)

    2 :第二段 (.*)

    1 第一段([^:]+)

    [root@localhost sed]# head test.txt |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 替换成123,/root 之前加一个反斜杠 脱义

    [root@localhost sed]# head test.txt  |sed 's//root/123/g'

    root:x:0:0:root:123:/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:123:/sbin/nologin

    加反斜杠 脱义 

    [root@localhost sed]# head test.txt  |sed 's//sbin/nologin/123/g'

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:123

    daemon:x:2:2:daemon:/sbin:123

    adm:x:3:4:adm:/var/adm:123

    lp:x:4:7:lp:/var/spool/lpd:123

    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:123

    operator:x:11:0:operator:/root:123

    也可以用@ 分隔开

    [root@localhost sed]# head test.txt  |sed 's@/sbin/nologin@123@g'

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:123

    daemon:x:2:2:daemon:/sbin:123

    adm:x:3:4:adm:/var/adm:123

    lp:x:4:7:lp:/var/spool/lpd:123

    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:123

    operator:x:11:0:operator:/root:123

     

    删除文件中所有字母, 用[a-zA-Z]来表示字母

    [root@localhost sed]# head  test.txt  |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::/://

    在所有的行前面加上aaa字符,(.*)表示一整行,&/(and符号表示前面的小括号),添加字符为aaa:

     

     

    [root@localhost sed]# head test.txt  |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

     

  • 相关阅读:
    Express入门
    nodejs入门
    css实现点点点效果
    定时器详解和应用、js加载阻塞、css加载阻塞
    栈内存和堆内存有什么区别?
    webpack入门
    Ubuntu常用命令集合
    HTTP缓存机制
    125. 验证回文字符串
    算法的时间复杂度和空间复杂度(js版)
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/8299161.html
Copyright © 2011-2022 走看看