Linux-sed

sed编辑器

简介

sed编辑器又称为流编辑器,主要用来交互式的插入、删除、替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

执行步骤

  1. 一次从输入中读取一行数据
  2. 根据所提供的编辑器的命令匹配数据
  3. 按照命令修改流中的数据
  4. 将新的数据输出到STDOUT

sed命令选项

选项 描述
-e 在处理输入时,将script中指定的命令添加到已有的命令中
-f 在处理输入时,将file中指定的命令添加到已有的命令中
-n 不产生命令输出,使用print命令来完成输出
从命令行定义编辑器命令

​ sed编辑器并不会真正的修改文本文件中的数据,只是将修改后的数据发送到STDOUT中

image-20200601153419243

从命令行使用多个编辑器命令(-e)

​ 在命令行要执行多个命令是时候,只需加-e 参数

image-20200601154142119

从文件中读取编辑器命令(-f)

​ 在处理数据的时候,可能存在需要大量的编辑器命令,那么通过文件来读取就更加的方便了

image-20200601154718390

sed基础

替换选项(s)

替换标记
数字 新文本将从替换第几处匹配的地方
g 全局替换,新文本将会替换所有匹配的文本内容
p 表明原先行的内容要打印出来
w file 将替换的结果写到文件中
数字

image-20200601155741492

数字代表的是匹配每行中的第几次出现的字符,如上图,第一次执行时,没有改变结果,第二次的时候改变了。

g

image-20200601160040792

全局替换匹配的文本内容

p

image-20200601160238153

一般使用p会配合 -n使用;-n 禁止sed编辑器输出。如果不加-n 就会出现上图中重复的现象

w file

image-20200601160431717

将替换的结果信息输出到文件中

注意

​ 在shell脚本中特殊字符需要进行转义 使用 \

行寻址

默认情况下sed命令会作用于整个文本数据的所有行,可以通过行寻址的方式来作用于特定的行或某些行

行寻址两种方式

命令格式 [address] command

address {

​ command1

​ command2

​ command3

}

数字形式表示行区间

1、只修改文本中的某一行

image-20200601163507961

2、修改某个行区间的数据

image-20200601163609815

3、也可以使用$表示到结尾

image-20200601163707639

文本模式来过滤出行

文本模式来进行过滤只作用匹配文本模式的行上

image-20200601164043887

也可以通过组合命令来执行

image-20200601164441435

删除(d)

在删除的时候,最后用d命令来执行 。一般在使用sed的时候都是会通过配合正则表达式来进行数据删除

删除文本中包含50字符的所有行

image-20200601164947610

插入和append

插入和append方式差不多,就数据插入到文本中,i 表示插入当前选中行的上一行,a表示插入到下一行

image-20200601165743568

修改

修改,相当于是将整个作用的行全部替换掉

image-20200601170303527

多行命令

在使用sed编辑器的基础命令时,你可能注意到了一个局限。所有的sed编辑器命令都是针对单行数据执行操作的。在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行。sed编辑器根据定义好的脚本命令一次处理一行数据,然后移到下一行重复这个过程。

如果用普通的sed编辑器命令来处理文本,就不可能发现这种被分开的短语。

sed编辑器包含三个可用的特殊文本处理命令

N 将数据流中的下一行加进来创建一个多行组(multiline group)来处理
D 删除多行组中的一行
P 打印多行组中的一行

1、使用普通删除命令,会将所有匹配的空行都删除

image-20200601172841547

2、使用N命令,只会删除匹配到的下一行

image-20200601173022949

sed编辑器会继续执行命令列表,该命令列表使用d命令来删除空白行。sed编辑器执行完命令脚本后,会从数据流中读取下一行文本,并从头开始执行命令脚本。因为sed编辑器再也找不到包含单词header的行了。所以也不会有其他行会被删掉。

3、合并某一行

image-20200601192509434

posted @   张and强  阅读(213)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示