shell ---sed

作者: 单单丹丹 | 来源:发表于2017-08-06 23:37 被阅读0次

    sed : 是一种几乎包括所有UNIX平台的轻量级流编辑器(stream edit)。主要用来将数据进行选取,替换,删除,新增的命令。支持管道符操作

    1. 命令详情

    • sed [选项] '[动作]' 文件名
    • 选项:
      -n : 不显示原来的行到屏幕,只显示增加的行
      -e : 允许对输入数据应用多条sed命令编辑
      -i : 用sed修改结果,直接修改读取数据的文件,而不是由屏幕输出
    • 动作:
      a\ : 追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。(append)
      c\ : 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
      i\ : 插入,在当前行前添加一行或多行,插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。(insert)
      d : 删除,删除指定行(delete)
      p : 打印,输出指定行(print)
      s : 字串替换,用一个字符串替换另外一个 字符串。格式为 “行范围s/旧字符串/新字符串/g”(和vim中的替换格式类似)。(substitute)

    使用-e时多个命令间用;分割


    -e

    1.1 字符替换s详解

    1.1.1 简单用法

    s命令默认情况下只替换每行中出现的第一处,要让替换命令对一行中不同位置出现的文本起作用,必须使用替换标记。替换标记会在替换命令字符串之后设置:
    s/pattern/replacement/flags :'/'字符分隔符

    s处理单行流数据 s处理多行数据 未添加flags
    1.1.2 四种可用替换标记
    1. 数字,表明新文本将替换第几处模式匹配的地方


      数字
    2. g,表明新文本将替换所有已有文本的地方


      g
    3. p,表明打印行,通常和 -n一起使用,打印那些发生替换的行


      p
    4. w file,将替换的结果写到file文本中


      w file

    当替换路径时需要替换的字符中出现‘/’,需要进行转义,看起来会比较乱,因此可以通过更换字符分隔符来解决这个问题。比如'/'替换为'!'。


    字符分隔符可替换
    1.1.3 替换特定行的字符串
    1. 使用行的数字范围
      sed流编辑器会将文本流中的第一行分配为第一行,然后继续顺序为新航分配行号。
      在命令指定行号时,可以是单个行号,或是使用起始行号、逗号以及结尾行号指定一定的范围内的行。$代表结尾。
    单个行号
    指定范围 结尾$
    1. 用文本模式来过滤出某行,可使用正则表达式


      固定文本模式
      正则模式

    1.2 删除行d

    1. 指定行号:使用类似s,可指定单个行号,或者一个范围,使用$代表结尾


      删除指定行
      删除范围行
    2. 匹配模式:同s


      删除匹配行
      正则模式
    3. 设置删除行起始模式,/pattern1/,/pattern/d,从pattern1开始删除,到pattern2结束,如果未找到pattern2则一直删除到结尾,如果出现多个pattern1,2则删除多次


      三种情况

    1.3 指定行前后插入(i\,a\)

    只能将文本插入或附加到单个行的前面或后面

    1. 直接插入到数据流前或附加到后面


      Paste_Image.png
    2. 将数据添加到数据流里面(寻址)
    • 指定行


      Paste_Image.png
    • 匹配模式


      Paste_Image.png

    1.4 修改行(c\)

    使用方式同i\,a

    Paste_Image.png

    2 其他

    打印行号:=
    sed '=' data.txt

    Paste_Image.png

    输出不可打印字符例如制表符\t : l
    sed -n 'l' data.txt

    Paste_Image.png

    相关文章

      网友评论

        本文标题:shell ---sed

        本文链接:https://www.haomeiwen.com/subject/uetikxtx.html