zoukankan      html  css  js  c++  java
  • sed

    sed是什么?

      sed是一种流编辑器。流编辑器是用来对输入流进行基本的文本转换(从一个管道文件或输入)。

    sed工作原理
    1. 脚本中所有的编辑命令都将依次应用于每个输入行;
    2. 命令应用于所有的行,除非寻址限制了受编辑命令影响的行;
    3. 原始的输入文件未被改变,编辑命令修改了原始行的备份(模式空间),并且将此备份发送到了标准输出.

    sed命令

      sed  [-参数]  '指令'  文本

    参数

    sed [参数] '指令' 文本

    -e 执行多个指令 只有给出多个指令的时候才需要-e,当只有一个指令的时候,sed可以自己决定

    sed -e 's/was/WAS/' -e 's/he/they/' file

    除了-e之外,使用多个指令的多种方法

    1. 用分号隔开sed 's/was/WAS/';sed 's/my/My/' file
    2. 输入单引号后按enter键(会出现多行输入的提示符>)
      sed '
      >s/was/WAS/
      >s/he/they/' file
    -f 指定脚本名称 将sed指令写在文件中,-f filename,直接跟文件名称 sed -f sedscr file
    -n 阻止输入行的自动显示 阻止输入行的自动显示,若想输出时,每个要生成输出的指令,都必须包含打印命令p
    sed -n -f sedscr sed_1.txt
    或者
    sed -nf sedscr sed_1.txt

    指令

    [address] 指令/pattern/replacement/flags

    flags修饰标识

    n,1-512之间的一个数字,表示第n次匹配的时候

    p,打印,于-n参数一起使用

    g,对模式空间的情况进行全局修改,不出现该修饰标识表示只有第一次出现的情况

    w,将模式空间的内容写到文件中

    s 替换 用一个字符窜替换另一个字符串 sed 's/love/lover/g' sed.txt
    d 删除(模式空间的内容) 如果某行匹配给定的地址,则删除该行,而不是只删除匹配内容

    sed 10,$d sed.txt 删除10到最后一行

    sed 4d sed.txt 删除第5行

    D 删除(多行模式空间)  只删除多行模式空间的第一行  
    a 追加
    追加[line-address]a
    text1
    text2
    1. 这些命令,每一个都要求后面跟一个反斜杠,用于转义第一个行尾,text必须从下一行开始.若要输入多行文本,则每行都要用反斜杠结束,最后一行列外.
    2. 插入命令是在当前行之前插入;追加命令是在当前行之后;更改则作用当前行
    i 插入 插入[line-address]i
    text1
    text2
    c 更改 更改[address]c
    text1
    text2 
    n 下一步next 打印模式空间中内容,并读取输入的下一行,但是脚本并不会返回脚本顶部

    /^H1/{     匹配任何以H1开头的任何行

    n        若匹配到了,打印模式空间的内容,并读取下一行,此时脚本并不会返回顶部,而是继续向下执行

    /^$/d       删除空行

    }

    N 下一步(多行模式空间) 读取新的输入行,并将其添加到模式空间的现有内容后面(模式空间内最初的内容和新的内容之间用换行符分割)  
     p  打印  输出模式空间的内容,它既不清楚模式空间的内容,  也不改变脚本的控制流(可以用于脚本调试)  
     P      y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
     y  转换  这个指令影响整个模式空间的所有内容  
     r  读  用于直接处理文件,后面直接跟文件名  
    w  用于直接处理文件,后面直接跟文件名  

    SED寻址

    1. 如果没有指定地址,sed会将命令应用于每个输入行
    2. 每个地址都是一个描述模式,行号或者寻址符号的正则表达式
    3. 举例说明
    如果没有指定地址,命令将用于每一行 sed 's/love/lover/g' sed.txt
    如果指定一个地址,命令将用于这个地址匹配的任意行 sed /^May/s/love/lover/g' sed.txt
    如果指定了由逗号隔开的多个地址,命令将用于匹配第一个地址匹配的任意行之后,继续用于第二个地址匹配的任意行... sed '/^then/,/^May/s/love/lover/g' sed.txt
    如果地址后面跟有!,命令用于不匹配该地址的任意行
    sed '/^May/!s/love/lover/g' sed.txt
  • 相关阅读:
    Linux的iptables和netfilter
    adb安装电视apk
    令牌桶实现服务器限流
    观察者模式代码实现
    Windows系统安装Oracle 11g 数据库
    Gitlab安装后 启动之后报错502
    Git两库合并历史记录
    Maven打包时指定对应环境的配置文件
    HierarchicalDataTemplateGridControl
    自定义CommandHandler
  • 原文地址:https://www.cnblogs.com/yingnan/p/4546234.html
Copyright © 2011-2022 走看看