zoukankan      html  css  js  c++  java
  • linux之sed用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法。

    sed命令行格式为:

        sed[-nefri] 'command' 输入文本    

    常用选项:
            -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
            -e∶直接在指令列模式上进行 sed 的动作编辑;
            -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
            -i∶直接修改读取的档案内容,而不是由萤幕输出。

      -r:  使用了扩展正则表达式。    

    常用命令:
            a   ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
            c   ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
            d   ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
             i   ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
             p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
             s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

          r  ∶新增,类似于a,也是将内容追加到指定行的后边,只不过r是将指定文件内容读取并追加到指定行下边。 

    实例

      在passwd文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e '4athis is a test' passwd

    首先看看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
    ···
    redis:x:498:497:Redis Server:/var/lib/redis:/sbin/nologin
    nginx:x:497:496:Nginx web server:/var/lib/nginx:/sbin/nologin
    lighttpd:x:496:495:lighttpd web server:/var/www/lighttpd:/sbin/nologin
    

     使用sed命令后

    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
    this is a test
    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
    ···
    

     在passwd文件用this a test取代2,5行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e '2,5cthis is a test' passwd

    使用sed命令后

    root:x:0:0:root:/root:/bin/bash
    this is a test
    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
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ···
    

    删除passwd文件的2,5行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e '2,5d' passwd
    

     使用sed命令后

    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
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ···
    

    passwd文件的2行插入this is a test,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e '2ithis is a test' passwd
    

     使用sed命令后

    root:x:0:0:root:/root:/bin/bash
    this is a test
    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
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin

    显示passwd文件的2-5行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -n '2,5p' passwd
    

      使用sed命令后

    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
    

     显示passwd文件中包含root的行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e /root/p passwd
    

     使用sed命令后

    root:x:0:0:root:/root:/bin/bash
    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
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    ···

    如果root找到,除了输出所有行,还会输出匹配行。

    使用-n的时候将只打印包含模板的行。

    sed -n '/root/p' passwd
    

      使用sed命令后

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

      passwd文件中root替换成liupf,并将结果输出到标准输出,在命令行提示符下输入如下命令:

    sed -e 's/root/liupf/' passwd
    

       使用sed命令后

    liupf: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
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    ···


     sed.test内容

    a a aa a
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    ···
    

     将文件sed.test内容追加到passwd最后

    sed -e '$r sed.test' passwd
    

     使用sed命令后

    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
    ···
    nginx:x:497:496:Nginx web server:/var/lib/nginx:/sbin/nologin
    lighttpd:x:496:495:lighttpd web server:/var/www/lighttpd:/sbin/nologin
    a a aa a
    a a aa a
    a a aa a
    a a aa a
    ···
    
  • 相关阅读:
    百度地图API开发----手机地图做导航功能
    手机端列表做异步加载!
    onethink判断是否是手机访问?
    PHP中文字数限制:中文字符串截取(mb_substr)
    onethink封装arclist调用文章列表!
    问答项目---提问回答采纳处理!
    问答项目---面包削导航的处理!
    问答项目---处理待解决/已回答/高悬赏/零回答!
    问答项目---格式化输出提问时间!
    问答项目---提问按钮如何做!
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/7278915.html
Copyright © 2011-2022 走看看