自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)

sed的使用

    • 一、什么是sed编辑器
      • 1.1 sed概述
      • 1.2 sed的工作流程
      • 1.3 sed命令的格式
      • 1.4 sed命令的常用选项
      • 1.5 sed命令的常用操作
    • 二、sed对文本的几种操作方式
      • 2.1 打印内容
        • 2.1.1 sed编辑器有两种寻址方式
      • 2.2 删除内容
      • 2.3 替换内容
      • 2.1 插入内容

一、什么是sed编辑器

1.1 sed概述

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

1.2 sed的工作流程

sed 的工作流程主要包括读取、执行和显示三个过程∶

  • 读取∶ sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern space)
  • 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址, 否则sed 命令将会在所有的行上依次执行。
  • 显示∶发送修改后的内容到输出流。在发送数据后, 模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
注意∶ 默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

1.3 sed命令的格式

第一种:
sed -e '操作' 文件1 文件2

第二种:
sed -n -e '操作' 文件1 文件2 

第三种:
sed -f 脚本文件 文件1 文件2 

第四种:
sed -i -e '操作' 文件1 文件2

1.4 sed命令的常用选项

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

1.5 sed命令的常用操作

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

二、sed对文本的几种操作方式

2.1 打印内容

实例1:打印指定行数内容和全部内容。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第1张图片
实例2:打印文本的行号
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第2张图片
实例3:实测常用操作“ l ”的用法。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第3张图片
实例3:打印行号和内容,行号在上,或者使用sed -n -e '=' -e 'p' testsed1效果也一样。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第4张图片

2.1.1 sed编辑器有两种寻址方式

  • 以数字形式表示行区间
  • 用文本模式来过滤出行

实例1:数字形式方式

实例2:打印前3行后退出。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第5张图片
实例3:打印文本的奇数和偶数行。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第6张图片

实例4:打印/etc/passwd文件内指定的行。


实例5:使用 -r 表示支持扩展正则表达式
在这里插入图片描述

2.2 删除内容

实例1:删除全部和删除指定的行

实例2:删除文本中的空行
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第7张图片
实例3:删除以指定字符结尾的行及取反。

实例4:删除一个区间的行
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第8张图片
特殊情况: 匹配到开头字符,无结尾的字符。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第9张图片

2.3 替换内容

格式:sed 行范围 s/旧字符串/新字符串/替换标记

四种替换标记:

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

实例1:替换指定字符和全局替换字符。(测试加 字符 g 的区别)
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第10张图片
实例2:将指定字符替换为空字符
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第11张图片
实例3:行首或者行尾添加指定字符。

实例4:替换指定字符后,然后添加到指定文本中

实例5:将文本中指定的字符(含特殊字符)替换为指定字符。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第12张图片
==注意:==可以自定义分隔符进行分隔,主要看s 后面跟着什么字符,就代表以什么字符进行分隔
在这里插入图片描述

2.1 插入内容

实例1:指定字符位置插入指定的字符。

实例2:匹配指定字符进行替换,和相等字符的转换

实例3:将指定文档的内容插入到指定文本内指定行数的的后面。
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第13张图片
实例4:将指定的行截切或复制到指定的行
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第14张图片
自动化运维必须要学的Shell文本处理三剑客之——sed用法(超多案例详细介绍)_第15张图片

实例5:将输出的字符进行互换位置
在这里插入图片描述

你可能感兴趣的:(Linux系统,linux,shell,运维,centos)