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

    3i就是insert插入的意思,在第3行前追加一行

    [root@bogon ~]# sed '3i 222' b.txt

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

    bin:x:1:1:bin:/bin:/sbin/nologin

    222

    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可以正则定位

    删root开头的行

    [root@bogon ~]# sed '/^root/d' b.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

    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 ~]#

    第1行删除

    [root@bogon ~]# sed '1d' b.txt

    第1行和第3行删除

    [root@bogon ~]# sed '1d;3d' b.txt

    删除1-3行

    [root@bogon ~]# sed '1,3d' b.txt

    [root@bogon ~]# touch c.txt

    [root@bogon ~]# vim c.txt

    [root@bogon ~]# cat c.txt

    1root

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]# sed '/sb$/d' c.txt

    1root

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    8sb2

    [root@bogon ~]#

    包含sb的都删除

    [root@bogon ~]# sed '/sb/d' c.txt

    1root

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    [root@bogon ~]# sed '/sb.*$/d' c.txt

    1root

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    [root@bogon ~]#

    2开头的行,改为111

    [root@bogon ~]# sed '/^2/c 111' c.txt

    1root

    111

    3egon

    4alex

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

    把全部都改为111

    [root@bogon ~]# sed 'c 111' c.txt

    111

    111

    111

    111

    111

    111

    111

    111

    [root@bogon ~]#

    最常用的命令是:

    替换把root还ROOT(如果一行有多个,只改第一个)

    [root@bogon ~]# sed 's/root/ROOT/' c.txt

    1ROOTroot

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

    一行出现多个,也可以替换:

    [root@bogon ~]# sed 's/root/ROOT/g' c.txt

    1ROOTROOT

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

    第1个字符是数字,第2个是字母的字符串中,把sb改为SB,/s意思是修改每行的第一个,/g是同一行有多个sb就全部都改SB

    [root@bogon ~]# sed '/^[0-9][a-Z]/s/sb/SB/g' c.txt

    1rootroot

    2tom

    3egon

    4alex

    5wupeiq

    6yuanhao

    7SB

    8SB2

    [root@bogon ~]#

    sed -r等于扩展,记住这个

    我只想把4alexsb换成4alexSB;[root@bogon ~]# sed -r 's/要换什么/换成什么/g' c.txt

    [root@bogon ~]# sed -r '/^[0-9]([a-Z]+)sb$/ s/sb/SB/g' c.txt

    1rootroot

    2tom

    3egon

    4alexSB

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

    我想把冒号前面的都删掉

    [root@bogon ~]# cat b.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  123()17  :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 ~]#

    匹配字母多个,一个非字母

    [root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])//g' b.txt

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

    x:1:1:bin:/bin:/sbin/nologin

    x:2:2:daemon:/sbin:/sbin/nologin

    x:3:4:adm:/var/adm:/sbin/nologin

     123()17  :x:4:7:lp:/var/spool/lpd:/sbin/nologin

    x:5:0:sync:/sbin:/bin/sync

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

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

    x:8:12:mail:/var/spool/mail:/sbin/nologin

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

    [root@bogon ~]#

    只取第1部分:([a-Z]+)

    [root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])/1/g' b.txt

    rootx:0:0:root:/root:/bin/bash

    binx:1:1:bin:/bin:/sbin/nologin

    daemonx:2:2:daemon:/sbin:/sbin/nologin

    admx:3:4:adm:/var/adm:/sbin/nologin

    lp 123()17  :x:4:7:lp:/var/spool/lpd:/sbin/nologin

    syncx:5:0:sync:/sbin:/bin/sync

    shutdownx:6:0:shutdown:/sbin:/sbin/shutdown

    haltx:7:0:halt:/sbin:/sbin/halt

    mailx:8:12:mail:/var/spool/mail:/sbin/nologin

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

    只取第2部分:([^a-Z])

    [root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])/2/g' b.txt

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

    :x:1:1:bin:/bin:/sbin/nologin

    :x:2:2:daemon:/sbin:/sbin/nologin

    :x:3:4:adm:/var/adm:/sbin/nologin

      123()17  :x:4:7:lp:/var/spool/lpd:/sbin/nologin

    :x:5:0:sync:/sbin:/bin/sync

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

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

    :x:8:12:mail:/var/spool/mail:/sbin/nologin

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

    [root@bogon ~]#

    最后一个单词不要

    [root@bogon ~]# sed -r 's/([a-Z]+)$//g' b.txt

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

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

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

    adm:x:3:4:adm:/var/adm:/sbin/

    lp  123()17  :x:4:7:lp:/var/spool/lpd:/sbin/

    sync:x:5:0:sync:/sbin:/bin/

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

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

    mail:x:8:12:mail:/var/spool/mail:/sbin/

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

    [root@bogon ~]#

    也可以

    [root@bogon ~]# sed -r 's/([^a-Z])([a-Z]+)$/1/g' b.txt

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

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

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

    adm:x:3:4:adm:/var/adm:/sbin/

    lp  123()17  :x:4:7:lp:/var/spool/lpd:/sbin/

    sync:x:5:0:sync:/sbin:/bin/

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

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

    mail:x:8:12:mail:/var/spool/mail:/sbin/

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

    把第1个单词和第2个单词调换

    [root@bogon ~]# sed -r 's/^([a-Z]+)([^a-Z])([a-Z]+)([^a-Z])/3214/g' b.txt

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

    x:bin:1:1:bin:/bin:/sbin/nologin

    x:daemon:2:2:daemon:/sbin:/sbin/nologin

    x:adm:3:4:adm:/var/adm:/sbin/nologin

    lp  123()17  :x:4:7:lp:/var/spool/lpd:/sbin/nologin

    x:sync:5:0:sync:/sbin:/bin/sync

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

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

    x:mail:8:12:mail:/var/spool/mail:/sbin/nologin

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

    [root@bogon ~]#

    删除每行第一个字符

    [root@bogon ~]# sed -r 's/^(.)(.*)$/2/' b.txt

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

    in:x:1:1:bin:/bin:/sbin/nologin

    aemon:x:2:2:daemon:/sbin:/sbin/nologin

    dm:x:3:4:adm:/var/adm:/sbin/nologin

    p  123()17  :x:4:7:lp:/var/spool/lpd:/sbin/nologin

    ync:x:5:0:sync:/sbin:/bin/sync

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

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

    ail:x:8:12:mail:/var/spool/mail:/sbin/nologin

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

    [root@bogon ~]#

    不要倒数第二个单词

    [root@bogon ~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/134/' b.txt

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

    bin:x:1:1:bin:/bin://nologin

    daemon:x:2:2:daemon:/sbin://nologin

    adm:x:3:4:adm:/var/adm://nologin

    lp  123()17  :x:4:7:lp:/var/spool/lpd://nologin

    sync:x:5:0:sync:/sbin://sync

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

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

    mail:x:8:12:mail:/var/spool/mail://nologin

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

    sed -ri就会直接改了文件了

    先弄-r,备份一下,否则-ri错了就错了

    也可以

    sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/134/' b.txt >> cc.txt

    ^[^1234b]意思是开头不是1或2或3或4或b的字符串

    Sed /i 插入

    Sed /p 打印

    Sed /d 删除

    Sed /c 替换

    Sed -o 行数

    Sed -I 直接修改文件

    Sed -r 扩展命令

    Sed -r ‘s///g’ /etc/passwd 把一些字符换成别的字符,g是一行中只要出现某字符就改,如果只改第2行,就‘2s///g’

    管道符有先执行,后执行的能力:

    [root@bogon ~]# egrep -v '^#' c.txt | egrep -v '^ *$'

    1rootroot

    2tom

    3egon

    4alexsb

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

    只改第4行的sb为root

    [root@bogon ~]# sed -r  '4s/sb/root/g'  c.txt

    1rootroot

    2tom

    3egon

    4alexroot

                          

    5wupeiq

    6yuanhao

    7sb

    8sb2

    [root@bogon ~]#

  • 相关阅读:
    面向 例题
    面向
    mysql 储存过程
    php数组
    PHP 函数
    python 三大器
    python 第十一章 函数名+格式化+迭代器+递归
    python 第十章 动态参数+名称空间+嵌套+修改值
    python 第八章 r w a 等文件操作
    python 第七章 数据类型补充+遇到的坑+二次编码
  • 原文地址:https://www.cnblogs.com/jensenxie/p/7953699.html
Copyright © 2011-2022 走看看