• sed命令使用详解归纳


    用法

    sed [option] 'Address Command' yourfile
    e.g. sed -n '2,13p' lineuser #打印文件lineuser中第2~13行的内容,-n为option, 2,13为Address,p为Command
    Address与Command中间的空格也可以省略
     

    sed处理过程

    待处理的文件一行一行地被sed读入到模式空间(pattern space)中,根据匹配及相应的处理命令进行输出显示,默认下每个模式空间的内容都会输出
     

    sed常用option

      -n:不显示模式空间的行,只显示被匹配处理的行
      -i : 将处理后的结尾直接覆盖原文件
      -e script:可以指定多个-e参数,每个处理命令都依照最原先的文件内容进行处理,而不是一个处理完再传递给下一个处理
      -f script-file :将命令参数写到一个文件中进行调用
      -r:表示使用扩展正则表达式
     
    练习文件
    [root@zejin240 tmp]# cat lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    5:gootee
    6:sync
    7:shutdown
    8:halt
    9:mail
    10:uucp
    11:operator
    12:hadoop
    13:gopher
    14:admin
    15:nobody
     
     

    Address匹配方式

    1.addr1 匹配指定特定行
    #显示第三行内容
    [root@zejin240 tmp]# sed -n '3p' lineuser
    3:daemon
     
    2.addr1,addr2 匹配从addr1到addr2的行
    #打印第四到六行
    [root@zejin240 tmp]# sed -n '4,6p' lineuser
    4:adm
    5:gootee
    6:sync
     
    3./regexp/ 匹配含有regexp的行
    打印所有包含oo字符的行
    [root@zejin240 tmp]# sed -n '/oo/p' lineuser
    1:root
    5:gootee
    12:hadoop
     
    4./regexp1/, /regexp2/ 匹配从含有regexp1,到regexp2的行
    #打印从包含有mon的行到包含有adm的行
    [root@zejin240 tmp]# sed -n '/mon/,/adm/p' lineuser
    3:daemon
    4:adm
     
    5.first~step 匹配以first行为开始,以step为间隔的行
    #打印1,3,5....的行,即奇数行
    [root@zejin240 tmp]# sed -n '1~2p' lineuser
    1:root
    3:daemon
    5:gootee
    7:shutdown
    9:mail
    11:operator
    13:gopher
    15:nobody
     
    #打印2,4,6....的行,即偶数行
    [root@zejin240 tmp]# sed -n '2~2p' lineuser
    2:bin
    4:adm
    6:sync
    8:halt
    10:uucp
    12:hadoop
    14:admin
     
     
    6.addr1,+N 匹配addr1行及之后的N行
    [root@zejin240 tmp]# sed -n '3,+4p' lineuser
    3:daemon
    4:adm
    5:gootee
    6:sync
    7:shutdown
     
    7./regexp/,+N 匹配含有regexp的行,及其后面N行
    [root@zejin240 tmp]# sed -n '/adm/,+1p' lineuser
    4:adm
    5:gootee
    14:admin
    15:nobody
     
     
     
     

    Command命令

    1. a ext 在匹配的行后添加行
    #在5到8行后每行添加一行
    [root@zejin240 tmp]# sed '5,8a ice to meet you' lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    5:gootee
    nice to meet you
    6:sync
    nice to meet you
    7:shutdown
    nice to meet you
    8:halt
    nice to meet you
    9:mail
    10:uucp
    11:operator
    12:hadoop
    13:gopher
    14:admin
    15:nobody
     
    2. i ext 在匹配的行前添加行
    #在5到8行前每行添加一行
    [root@zejin240 tmp]# sed '5,8i ice to meet you' lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    nice to meet you
    5:gootee
    nice to meet you
    6:sync
    nice to meet you
    7:shutdown
    nice to meet you
    8:halt
    9:mail
    10:uucp
    11:operator
    12:hadoop
    13:gopher
    14:admin
    15:nobody
     
     
    3. d 删除匹配的行
    #删除5到13行
    [root@zejin240 tmp]# sed '5,13d' lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    14:admin
    15:nobody
     
    4. c ext替换匹配的行
    #5到13行的所有内容替换成一行
    [root@zejin240 tmp]# sed '5,13c ice to meet you' lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    nice to meet you
    14:admin
    15:nobody
     
     
    5. p 打印匹配的行 示例在上面已经出现,不再列举
    6. r file 在匹配的行后插入file的内容
    #在第3~5行每行后添加文件的内容
    [root@zejin240 tmp]# cat name
    Beijing
    Shenzhen
    [root@zejin240 tmp]# sed '3,5r name' lineuser
    1:root
    2:bin
    3:daemon
    Beijing
    Shenzhen
    4:adm
    Beijing
    Shenzhen
    5:gootee
    Beijing
    Shenzhen
    6:sync
    7:shutdown
    8:halt
    9:mail
    10:uucp
    11:operator
    12:hadoop
    13:gopher
    14:admin
    15:nobody
     
    7 s/regexp/replacement/ 将regexp替换成replacement,默认只处理每一行第一个出现的字符串,如果要处理所有的字符串,需要在最后加上g,如果需要忽略大小写,需要在最后加上i
    #将第3到15行里面出现oo的地方都替换成NICE TO MEET YOU
    [root@zejin240 tmp]# sed '3,15s/oo/NICE TO MEET YOU/' lineuser
    1:root
    2:bin
    3:daemon
    4:adm
    5:gNICE TO MEET YOUtee
    6:sync
    7:shutdown
    8:halt
    9:mail
    10:uucp
    11:operator
    12:hadNICE TO MEET YOUp
    13:gopher
    14:admin
    15:nobody
     
     
     
     
     
     
  • 相关阅读:
    CentOS在线安装RabbitMQ3.7
    php redis的GEO地理信息类型
    (PHP)redis Zset(有序集合 sorted set)操作
    (PHP)redis Set(集合)操作
    (PHP)redis Hash(哈希)操作
    (PHP)redis List(列表)操作
    php cURL error 60
    go build 不同系统下的可执行文件
    windows下改变go的gopath
    线程池简要学习[转]
  • 原文地址:https://www.cnblogs.com/zejin2008/p/5988631.html
Copyright © 2020-2023  润新知