Shell编程——sed编辑器使用方法(详细图解各种使用方法例题)

sed编辑器介绍

  • sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流
  • sed的工作流程主要包括读取、执行和显示三个过程
    • 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)
    • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
    • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完
  • 在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完
  • 注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出

sed命令格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-i使用前建议先备份一下
在这里插入图片描述
在这里插入图片描述

常用格式

  • -e或- -expression=: 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一 般在执行多个操作命令使用
  • -f或- -file=: 表示用指定的脚本文件来处理输入的文本文件
  • -h或- -help: 显示帮助
  • -n、- -quiet或silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出
  • -i: 直接修改目标文本文件

常用操作

  • s:替换,替换指定字符
  • d:删除,删除选定的行
  • a:增加,在当前行下面增加一行指定内容
  • i:插入,在选定行,上面插入一行指定内容
  • c: 替换,将选定行替换为指定内容
  • y:字符转换,转换前后的字符长度必须相同
  • p: 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用
  • l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

灵活运用实例图解

  • -testfile1文件内容

在这里插入图片描述

  • sed -e 'p' testfile1为什么执行两遍?
    因为sed命令本身就会执行一遍另一遍是p所执行的
    在这里插入图片描述
  • sed -n 'p' testfile1一般-n配合p来使用sed本身处理的内容不显示
    在这里插入图片描述
  • sed -n '=' testfile1显示行号
    在这里插入图片描述
  • sed -n 'l' testfile1 l会显示ASCII码$就是ASCII码的一种这里代表结尾
    在这里插入图片描述
  • sed -n -e '=;p' testfile1既要显示行号又要显示内容,多个操作结合在一起用;相当于一个操作可不加-e
    sed -n -e '=' -e 'p' testfile1两种方式结果相同
    在这里插入图片描述
  • sed -n '
    > =
    > p
    > ' testfile1
    a在这里插入图片描述

灵活运用实例图解之地址寻址

sed编辑器有两种寻址方式

  • 以数字形式表示行区间
    • sed -n '1p' testfile1显示第一行
      在这里插入图片描述

    • sed -n '$p' testfile1显示最后一行
      在这里插入图片描述

    • sed -n '1,3p' testfile1显示一到三行的区间
      在这里插入图片描述

    • sed -n '3,$p' testfile1显示第三行到最后一行区间
      在这里插入图片描述

    • sed -n '1,+3p' testfile1显示一行+后面三行内容即显示四行内容
      在这里插入图片描述

    • sed '5q' testfile1显示五行内容后退出,不加-n用sed本身去显示
      在这里插入图片描述

    • sed -n '1p;3p' testfile1显示一和三行的内容
      在这里插入图片描述

    • sed -n 'p;n' testfile1打印奇数行:n表示移动到下一行
      在这里插入图片描述

    • sed -n 'n;p' testfile1打印偶数行:n先执行移动到下一行p再打印
      在这里插入图片描述

    • sed -n '2,${n;p}' testfile1从第二行开始到行尾依次执行{}内np操作

    • sed -n '2,${p;n}' testfile1
      在这里插入图片描述

    • for i in {1..10}; do echo $i; done | sed -n 'n;p'for循环显示连续的数字通过管道符号交给sed也可以实现奇偶行显示
      for i in {1..10}; do echo $i; done | sed -n 'p;n'
      在这里插入图片描述

  • 用文本模式来过滤出行
    • sed -n '/user/p' /etc/passwd显示带有user的行
      在这里插入图片描述

    • sed -n '/^a/p' /etc/passwd输出以a开头的行
      在这里插入图片描述

    • sed -n '/bash$/p' /etc/passwd以bash为结尾的行
      在这里插入图片描述

    • sed -n '/ftp\|root/p' /etc/passwd显示ftp或root的行管道符号要加反斜杠\
      在这里插入图片描述

    • sed -n '2,/nobody/p' /etc/passwd从第二行开始显示直到有nobody的行为止
      sed -n '2,/nobody/=' /etc/passwdp换成=号可以进行验证第二行开始到nobody的行数
      在这里插入图片描述

    • sed -nr '/ro{1,}t/p' /etc/passwd-r代表支持扩展正则表达式

    • sed -n '/ro\{1,\}t/p' /etc/passwd不加-r要用反斜杠
      在这里插入图片描述


  • 删除行d
    • sed 'd' testfile1删除全部行
      a

    • sed '3d' testfile1只删除第三行显示
      在这里插入图片描述

    • sed '$d' testfile1删除末尾行显示
      在这里插入图片描述

    • sed '3,5d' testfile1删除三到五行内容显示
      在这里插入图片描述

    • sed '/^$/d' testfile1删除空行内容显示
      在这里插入图片描述

    • sed '/nologin$/d' /etc/passwd删除所有nologin结尾的行
      在这里插入图片描述

    • sed '/bash$/!d' /etc/passwd删除所有除了bash结尾的行!表示取反
      在这里插入图片描述

    • sed '/2/,/3/d' testfile2从第一个带2的行开始删除到第一个带3的行
      在这里插入图片描述

    • sed '/1/,/3/d' testfile2如果内容中有符合条件的多出则执行多次删除开启删除关闭的效果若开启删除后没有对应的字符关闭删除则无法关闭
      在这里插入图片描述


  • 替换

  • 行范围 s/旧字符/新字符串/替换标记

  • 4种替换标记
    数字:表明新字符串将替换地基础匹配的地方
    g:表明新字符串将会替换所有匹配的地方
    p:打印与替换命令匹配的行,与-n一起使用
    w文件:将替换的结果写到文件中

    • sed -n 's/root/admin/p' /etc/passwd把带有root的行替换成admin,一行中有两个则替换第一个
      在这里插入图片描述

    • sed -n 's/root/admin/2p' /etc/passwd有两个root的行第二个替换成换成admin
      在这里插入图片描述

    • sed -n 's/root/admin/gp' /etc/passwd全部替换
      在这里插入图片描述

    • sed -n 's/root//p' /etc/passwd把所有的root替换成空值等于删掉
      在这里插入图片描述

    • sed -n '1,10 s/^/#/p' /etc/passwd一到10行行首添加#注释
      在这里插入图片描述

    • sed -n '/^root/ s/$/#/p' /etc/passwd在以root开同的行,行尾添加#号
      在这里插入图片描述

  • sed -f chen.sed /etc/passwd执行文件中的多个命令[sed命令格式为sed -f 脚本文件名 文件名]
    在这里插入图片描述

  • sed '1,5w out.txt' /etc/passwd从passwd中保存一到五行内容到指定文件中。此文件不存在就会顺便创建文件
    在这里插入图片描述
    在这里插入图片描述

  • sed '1,5 s/^/#/w out.txt' /etc/passwd对文件内容进行一到五行行首添加#再保存到指定文件中
    在这里插入图片描述

  • sed -n 's/\/bin\/bash/\/bin\/nologin/p' /etc/passwd替换内容中有/等特殊符号需要\
    在这里插入图片描述

  • sed -n 's#/bin/bash#/bin/nologin#p' /etc/passwd在使用\过程中可能会造成字符混乱可以用#!来代替/此时就不需要反义字符
    在这里插入图片描述


  • 插入

  • sed '/45/c ABC' testfile2带45的行全行替换成ABC
    在这里插入图片描述

  • sed '/45/ y/45/AB/' testfile2带45的行对应换成AB,不对应会报错,不建议使用
    在这里插入图片描述

  • sed '1,3a ABC' testfile2在一到三行下面增加ABC,一般用于$a在行尾添加一条内容
    在这里插入图片描述

  • sed '1,3i ABC' testfile2在一到三行之前增加ABC一般用于1i在行首添加一条内容
    在这里插入图片描述

  • sed '5r /etc/resolv.conf' testfile2把resolv.conf内容读到文件第五行
    在这里插入图片描述

  • sed '/root/{H;d};$G' /etc/passwd将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后
    在这里插入图片描述
    在这里插入图片描述

  • sed '1,2H;3,4G' /etc/passwd把1到2行复制到3行和4行下面
    在这里插入图片描述


  • 直接修改目标文件

    • sed -i '1,5 s/^/#/' testfile2-i直接修改目标文件对其进行修改前建议先使用-n和p看一下效果或备份文件以防修改错误
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53496398/article/details/114846805