linux - sed

  1. sed是一种流编编器,linux中,主要中sed命令实现对文件的增删改替换查
  2. sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:
    1. 每次仅读取一行内容;
    2. 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
    3. 将执行结果输出。
    4. 当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。
      1. 格式  sed [选项] [脚本命令] 文件名
      2. 常见选项
        1. -n : 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
        2. -i : 此选项会直接修改源文件。
        3. -e <script>:  以选项中指定的script来处理输入的文本文件
        4. -f<script文件>: 以选项中指定的script文件来处理输入的文本文件。
        5. -r : 在脚本中使用扩展表达式
        6. -h : 显示帮助
      3. 脚本说明
        1. a : 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
        2. c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
        3. d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
        4. i : 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
        5. s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 sed –e ‘20s/old/new/g’  file 前面的20是行号,不加的话是对整个文件
      4. sed s  替换脚本命令
        1. 格式  sed –e  [address]s/pattern/replacement/flags  flle
        2. address 指定要操作的行,pattern 指的是需要替换的内容,replacement 指代的是要替换的新内容
        3. flags的标记如下:
          1. n :1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
          2. g : 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
          3. p :会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
          4. w file :将缓冲区中的内容写到指定的 file 文件中;
          5. & :  用正则表达式匹配的内容进行替换;
          6. \n : 匹配第 n 个子串,该子串之前在 pattern 中用 \(  \) 指定。
          7. \  : 转义(转义替换部分包含:&、\ 等)。
      5. sed d 删除的脚本命令
        1. 格式 : [address]d
          1. 通过行号指定   sed ‘3d’ file   删除第三行
          2. 通过特定区间指定   sed ‘2,4d’ file  删除2-4行
          3. 通过特殊的文件结尾字符  sed ‘3,$d’  file   删除第三行到末尾
        2. d 脚本命令会删除指定行中的所有内容。但使用该命令时要特别小心,如果你忘记指定具体行的话,文件中的所有内容都会被删除。例如 sed ‘d’ file
      6. sed a  和 i 脚本指令
        1. a 命令表示在指定行的后面附加一行,i 命令表示在指定行的前面插入一行。两个命令的基本格式完全相同sew
        2. 格式 : [address]a(或 i)\新文本内容 grep  ‘2a\context’ file 在第二行之后加上内容
        3. 如果需要将多行数据添加到数据流中,只需要在插入或者附加的文本的每一行末尾(除最后一行)添加反斜线即可
          1. sed ‘1i\
            This is one line of new text.\
            This is another line of new text.' data6.txt

      7. sed  c 替换脚本命令
        1. c 命令表示将指定行中的所有内容,替换成该选项后面的字符串。
        2. 格式为 : [address]c\用于替换的新文本
        3. sed ‘2c\context’ file  将第二行替换成context
      8. sed y  转换脚本命令
        1. y 转换命令是唯一可以处理单个字符的 sed 脚本命令
        2. [address]y/inchars/outchars/
        3. 转换命令会对 inchars 和 outchars 值进行一对一的映射,即 inchars 中的第一个字符会被转换为 outchars 中的第一个字符,第二个字符会被转换成 outchars 中的第二个字符...这个映射过程会一直持续到处理完指定字符。如果 inchars 和 outchars 的长度不同,则 sed 会产生一条错误消息。
        4. sed ‘y/123/789/’ file   将文件中的1替换成7,2替换成8,3替换成9
      9. sed p  打印脚本命令
        1. p 命令表示搜索符号条件的行,并输出该行的内容
        2. 格式为 : [address]p
        3. sed -n '/number 3/p' data6.txt  包含number 3的那行输出。用 -n 选项和 p 命令配合使用,我们可以禁止输出其他行,只打印包含匹配文本模式的行
        4. sed –n ‘2,3p’ file 输出2,3行
      10. sed w 脚本命令
        1. w 命令用来将文本中指定行的内容写入文件中
        2. 格式 : [address]w filename
        3. sed '1,2w test.txt' data6.txt 将data6.txt的1,2行写入test.txt
      11. sed r 脚本命令
        1. r 命令用于将一个独立文件的数据插入到当前数据流的指定位置
        2. [address]r filename
        3. sed 命令会将 filename 文件中的内容插入到 address 指定行的后面
        4. sed ‘3r data2.txt’ data1.txt 将data2.txt的内容插到data1.txt的第三行后面。
        5. sed ‘$r data2.txt’ data1.txt  $代表末尾
      12. sed q退出脚本命令
        1. q 命令的作用是使 sed 命令在第一次匹配任务结束后,退出 sed 程序,不再进行对后续数据的处理。
        2. sed '2q'  file  sed 命令在打印输出第 2 行之后,就停止了,是 q 命令造成的
        3. sed '/number 1/{ s/number 1/number 0/;q; }' test.txt  使用 q 命令之后,sed 命令会在匹配到 number 1 时,将其替换成 number 0,然后直接退出。


          posted on 2020-01-13 22:11  哆啦只是个梦哦  阅读(115)  评论(0编辑  收藏  举报

          导航