• sed命令拷屏


    http://blog.sina.com.cn/s/blog_45497dfa0100w6r3.html   sed样例较多,可以参考

    http://blog.sina.com.cn/s/blog_6dc9e4cf0100y40g.html

    sed各种修改文本用法总结

    http://blog.csdn.net/ysdaniel/article/details/7905837

    -e,-n,-i,-f
    g,p,r,w,!,d,l,n
    s//p,s//g,{;}
    
    [root@250-shiyan sed]# cat -n grade.txt
         1  M.Tansley       05/99   48311   Green     8     40     44
         2  J.Lulu          06/99   48317   green     9     24     26
         3  P.Bunny         02/99   48      Yellow    12    35     28
         4  J.Troll         07/99   4842    Brown-3   12    26     26
         5  L.Tansley       05/99   4712    Brown-2   12    30     28
    ###其中$d可以换成任何定址符号,例如逗号,正则,数字之类的
    ###删除尾行
    [root@250-shiyan sed]# sed '$d' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44
    J.Lulu          06/99   48317   green     9     24     26
    P.Bunny         02/99   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    ###删除除green行的其它行,相当于取反。
    [root@250-shiyan sed]# sed '/green/!d' grade.txt
    J.Lulu          06/99   48317   green     9     24     26
    ###行后插入
    [root@250-shiyan sed]# sed '/green/a\aaaaaaaaaaaa' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44
    J.Lulu          06/99   48317   green     9     24     26
    aaaaaaaaaaa
    P.Bunny         02/99   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    L.Tansley       05/99   4712    Brown-2   12    30     28
    ###行前插入
    [root@250-shiyan sed]# sed '/green/i\aaaaaaaaaaaa' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44
    aaaaaaaaaaa
    J.Lulu          06/99   48317   green     9     24     26
    P.Bunny         02/99   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    L.Tansley       05/99   4712    Brown-2   12    30     28
    ###替换行
    [root@250-shiyan sed]# sed '/green/c\aaaaaaaaaaaa' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44
    aaaaaaaaaaa
    P.Bunny         02/99   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    L.Tansley       05/99   4712    Brown-2   12    30     28
    [root@250-shiyan sed]# sed '1,3y/99/87/' grade.txt
    M.Tansley       05/88   48311   Green     8     40     44
    J.Lulu          06/88   48317   green     8     24     26
    P.Bunny         02/88   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    L.Tansley       05/99   4712    Brown-2   12    30     28
    [root@250-shiyan sed]# sed -n  's/$/&aa/p' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44aa
    J.Lulu          06/99   48317   green     9     24     26aa
    P.Bunny         02/99   48      Yellow    12    35     28aa
    J.Troll         07/99   4842    Brown-3   12    26     26aa
    L.Tansley       05/99   4712    Brown-2   12    30     28aa
    c.oi            13/97   8765    wo        34    88     4aa
    ###成功匹配并替换后写入aa.txt
    [root@250-shiyan sed]# sed -n  's/$/&aa/w aa.txt' grade.txt
    ###在green行后读入aa.txt文件。
    [root@250-shiyan sed]# sed '/green/r aa.txt' grade.txt
    M.Tansley       05/99   48311   Green     8     40     44
    J.Lulu          06/99   48317   green     9     24     26
    # no packages own wtmpaaaaaaaaaaaaaaaaa and btmpaaaaaaaaaaaaaaaaa -- we'll rotate them here
    /var/log/wtmpaaaaaaaaaaaaaaaaa {
        create 0664 root utmpaaaaaaaaaaaaaaaaa
    /var/log/btmpaaaaaaaaaaaaaaaaa {
        create 0600 root utmpaaaaaaaaaaaaaaaaa
    P.Bunny         02/99   48      Yellow    12    35     28
    J.Troll         07/99   4842    Brown-3   12    26     26
    L.Tansley       05/99   4712    Brown-2   12    30     28
    c.oi            13/97   8765    wo        34    88     4
    
    ###
    [root@250-shiyan sed]# sed  -n '/file/,/root/s/file/iiiiiiiiiiiiiiii/p' logrotate.conf
    # rotate log iiiiiiiiiiiiiiiis weekly
    # create new (empty) log iiiiiiiiiiiiiiiis after rotating old ones
    # use date as a suffix of the rotated iiiiiiiiiiiiiiii
    # uncomment this if you want your log iiiiiiiiiiiiiiiis compressed
    ###默认只替换匹配到的第一个字符串,除非加g,全局替换。
    [root@250-shiyan sed]# sed -n  's/tmp/&aaaaaaaaaaaaaaaaa/p' logrotate.conf
    # no packages own wtmpaaaaaaaaaaaaaaaaa and btmp -- we'll rotate them here
    /var/log/wtmpaaaaaaaaaaaaaaaaa {
        create 0664 root utmpaaaaaaaaaaaaaaaaa
    /var/log/btmpaaaaaaaaaaaaaaaaa {
        create 0600 root utmpaaaaaaaaaaaaaaaaa
    ###全局替换并打印,同时写入aa.txt文件。
    [root@250-shiyan sed]# sed -n  's/tmp/&aaaaaaaaaaaaaaaaa/gpw aa.txt' logrotate.conf
    # no packages own wtmpaaaaaaaaaaaaaaaaa and btmpaaaaaaaaaaaaaaaaa -- we'll rotate them here
    /var/log/wtmpaaaaaaaaaaaaaaaaa {
        create 0664 root utmpaaaaaaaaaaaaaaaaa
    /var/log/btmpaaaaaaaaaaaaaaaaa {
        create 0600 root utmpaaaaaaaaaaaaaaaaa
    
    ###只对下一行操作
    [root@250-shiyan sed]# sed '/green/{n;s/12/9999/;}' grade.txt
    M.Tansley       05/99   48311   Green   8       40      44
    J.Lulu          06/99   48317   green   9       24      26
    P.Bunny         02/99   48      Yellow  9999    35      28
    J.Troll         07/99   4842    Brown-3 12      26      26
    L.Tansley       05/99   4712    Brown-3 12      30      28
    E.Wo            02/87   76      bule    34      88      5
    
    ###对不连续行执行操作,即指定行的删除
    [root@250-shiyan sed]# sed -i '1s/$/#&/;4s/$/#&/' grade.txt
    [root@250-shiyan sed]# cat grade.txt
    #
    J.Lulu          06/99   48317   green   9       24      26
    P.Bunny         02/99   48      Yellow  12      35      28
    J.Troll         07/99   4842    Brown-3 12      26      26#
    L.Tansley       05/99   4712    Brown-3 12      30      28
    E.Wo            02/87   76      bule    34      88      5

    ###针对不连续行操作
    [root@250-shiyan sed]# sed '1d;3d;5d' grade.txt
    J.Lulu          06/99   48317   green   9       24      26
    J.Troll         07/99   4842    Brown-3 12      26      26#
    E.Wo            02/87   76      bule    34      88      5
    ###标签函数应用,较难理解。定义标签p1,执行替换操作,当A或B到达3个时。 [root@
    250-shiyan sed]# cat > file A B [root@250-shiyan sed]# sed '{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]{3}/b;b p1;}' file AAA BBB ###列出非打印字符 [root@250-shiyan sed]# sed -n 'l' grade.txt M.Tansley 05/99 48311 Green 8 40 44$ J.Lulu 06/99 48317 green 9 24 26$ P.Bunny 02/99 48 Yellow 12 35 28$ J.Troll 07/99 4842 Brown-3 12 26 26$ L.Tansley 05/99 4712 Brown-3 12 30 28$ E.Wo 02/87 76 bule 34 88 5$

    ###第三行打印完就退出
    [root@250-shiyan sed]# sed '3q' logrotate.conf
    # see "man logrotate" for details
    # rotate log files weekly
    weekly

    其中:test_sed的内容是:
    1234567890
    2345678901
    3456789012
    4567890123
    
    sed 'y/1234567890/ABCDEFGHIJ/' test_sed
    ABCDEFGHIJ
    BCDEFGHIJA
    CDEFGHIJAB
    DEFGHIJABC
    注意变换关系是按两个list的位置对应变换
    
    sed 's/01/Ab/g' test_sed
    1234567890
    23456789Ab
    3456789Ab2
    456789Ab23
    注意:第一行的0,1没有分别替换为A,b
    
    test.txt,内容如下:
    http://www.5566.cn/produce/20070804112/315613171.shtml
    http://bj.5566.cn/produce/20070804112/31581217.shtml
    http://sz.5566.cn/produce/2008090412/31581247.shtml
    
    要求如下:将http://*.5566.cn/替换成/home/html/www.5566.cn
    
    # sed -n 's/http.*.cn//home/html/www.5566.cn/gp' test.txt
    /home/html/www.5566.cn/produce/20070804112/315613171.shtml
    /home/html/www.5566.cn/produce/20070804112/31581217.shtml
    /home/html/www.5566.cn/produce/2008090412/31581247.shtml
    [root@250-shiyan sed]# sed '3q' logrotate.conf
    # see "man logrotate" for details
    # rotate log files weekly
    weekly
    
    -e选项允许在同一行里执行多条命令。
    sed -e '1,5d' -e 's/test/check/'example
    如例子所示,第一条命令删除1至5行,第二条命令用 check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
    一个比-e更好的命令是--expression。它能给sed表达式赋值。
    sed --expression='s/test/check/' --expression='/love/d' example
    [root@manage ~]# cat qq
    qqqqqqqqqqqq
    ddddddddddd
    wwwwwwwwwwww
    在第二行插入换行与uuuu行。 是换行 [root@manage
    ~]# sed -i '2i\nuuuuuuuuu' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd wwwwwwwwwwww
    [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd wwwwwwwwwwww

    在第三行后插入 [root@manage
    ~]# sed -i '3a\n111111111' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu ddddddddddd 111111111 wwwwwwwwwwww

    将第三行替换 [root@manage
    ~]# sed -i '3c22' qq [root@manage ~]# cat qq qqqqqqqqqqqq uuuuuuuuu 22 111111111 wwwwwwwwwwww

    删除第4行到第6行
    [root@manage ~]# sed -i '4,6d' qq
    [root@manage ~]# cat qq
    qqqqqqqqqqqq
    uuuuuuuuu
    22

    一次插入多行
    [root@manage ~]# cat qq
    qqqqqqqqqqqq
    aaa
    bbb
    ccc
    uuuuuuuuu
    22
    [root@manage ~]# sed -i '2i 5a ee; bbb fff; ccc  oooooo;' qq
    [root@manage ~]# cat qq
    qqqqqqqqqqqq
     5a ee;
    bbb fff;
    ccc  oooooo;
    aaa
    bbb
    ccc
    uuuuuuuuu
    22


  • 相关阅读:
    CentOS7下搭建hadoop2.7.3完全分布式
    在linux命令行利用SecureCRT上传下载文件
    SPDY和HTTP
    哈希表的工作原理
    LVS(Linux Virtual Server)
    Discuz x3 UCenter实现同步登陆原理
    Goroutine(协程)为何能处理大并发?
    缓存与DB数据一致性问题解决的几个思路
    固态硬盘SSD与闪存(Flash Memory)
    堆和栈的区别(转过无数次的文章)
  • 原文地址:https://www.cnblogs.com/createyuan/p/4213331.html
Copyright © 2020-2023  润新知