• 快速理解linux流编辑器sed命令


    原创 杜亦舒 性能与架构

    之前介绍过 awk 命令,sed 命令同样是非常重要的文本处理工具,涉及到linux shell开发时,几乎是避不开这两大利器的


    sed 是 stream editor 的简写,是一种非交互式的流编辑器,默认情况下,sed并不会改变原文件本身,而只是对文本流进行修改,并将修改后的结果打印到标准输出中


    与awk命令一样,sed处理文本时也是以行为单位,每处理完一行就立即打印出来,然后再处理下一行,直至全文处理结束


    sed可做的编辑动作包括删除、查找替换、添加、插入、从其他文件中读入数据等


    常用场景


    (1)shell脚本中不便使用vi命令对文件进行编辑,sed命令则很方便


    (2)文件太大,用vi编辑器打开文件有性能问题,就可以使用sed命令编辑


    (3)有规律的文本修改,例如全文替换,使用sed命令非常快速



    命令格式


    sed [options] 'command' file


    options 是参数


    command 是命令集合


    file 是要编辑的文件路径


    下面通过一些例子来了解sed的基本用法


    (1)删除


    d 命令用来删除


    $ sed '1d' Sed.txt


    将Sed.txt的第一行删除后输出到屏幕


    由于sed默认不修改原文件,如果希望保存修改后的文件则需要用重定向


    $ sed '1d' Sed.txt > Sed2.txt


    如果想直接修改文件,使用-i参数


    $ Sed -i '1d' Sed.txt


    这里不会有任何输出,而是直接修改了源文件,删除了第一行


    删除指定范围的行


    $ sed '1,3d' Sed.txt


    删除第一行到最后行


    $ sed '1,$d' Sed.txt


    删除最后一行


    $ sed '$d' Sed.txt


    删除除指定范围以外的行(只保留第5行)


    $ sed '5!d' Sed.txt


    删除所有包含abc的行


    $ sed '/abc/d' Sed.txt


    /abc/ 是指定搜索条件


    (2)查找替换


    s 命令用来查找替换


    $ sed 's/abc/ABC/' Sed.txt


    替换Sed.txt中每行的第一个abc为ABC


    也可以指定替换的个数,如想替换两个


    $ sed 's/abc/ABC/2' Sed.txt


    利用g选项,可以完成所有匹配值的替换


    $ sed 's/abc/ABC/g' Sed.txt


    /.../ 内部可以接收正则表达式,例如替换abc开头的


    $ sed 's/^abc/ABC/' Sed.txt


    (3)插入文本


    i 命令可以在匹配行之前插入

    a 命令可以在匹配行之后插入


    在第二行前插入文本


    $ sed '2 i test' Sed.txt


    在第二行后插入文本


    $ sed '2 a test' Sed.txt


    也可以在匹配行的上一行插入内容


    例如在匹配到abc的行的上一行插入


    $ sed '/abc/i est' Sed.txt


    (4)打印


    使用 p 命令可进行打印,这里使用sed命令时加 -n 参数,表示不打印没关系的行


    打印出文件中的第一行


    $ sed -n '1p' Sed.txt


    使用p命令,只打印实际处理过的行,简化输出


    $ sed -n 's/abc/ABC/p' Sed.txt


    这个命令先替换abc为ABC,然后只打印出替换过的行

  • 相关阅读:
    WPF编译时提示"xxx不包含适合于入口点的静态 Main方法xxx"
    被解放的姜戈04 各取所需
    SublimeText3 snippet 编写总结
    安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试
    被解放的姜戈03 所谓伊人
    被解放的姜戈02 庄园疑云
    被解放的姜戈01 初试天涯
    EXP-00000: Message 0 not found; No message file for product=RDBMS, facility=EXP问题的解决方案
    Python网络02 Python服务器进化
    Python网络01 原始Python服务器
  • 原文地址:https://www.cnblogs.com/xmanblue/p/6497393.html
Copyright © 2020-2023  润新知