Linux-sed
sed编辑器
简介
sed编辑器又称为流编辑器,主要用来交互式的插入、删除、替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
执行步骤
- 一次从输入中读取一行数据
- 根据所提供的编辑器的命令匹配数据
- 按照命令修改流中的数据
- 将新的数据输出到STDOUT
sed命令选项
选项 | 描述 |
---|---|
-e | 在处理输入时,将script中指定的命令添加到已有的命令中 |
-f | 在处理输入时,将file中指定的命令添加到已有的命令中 |
-n | 不产生命令输出,使用print命令来完成输出 |
从命令行定义编辑器命令
sed编辑器并不会真正的修改文本文件中的数据,只是将修改后的数据发送到STDOUT中
从命令行使用多个编辑器命令(-e)
在命令行要执行多个命令是时候,只需加-e 参数
从文件中读取编辑器命令(-f)
在处理数据的时候,可能存在需要大量的编辑器命令,那么通过文件来读取就更加的方便了
sed基础
替换选项(s)
替换标记
数字 | 新文本将从替换第几处匹配的地方 |
---|---|
g | 全局替换,新文本将会替换所有匹配的文本内容 |
p | 表明原先行的内容要打印出来 |
w file | 将替换的结果写到文件中 |
数字
数字代表的是匹配每行中的第几次出现的字符,如上图,第一次执行时,没有改变结果,第二次的时候改变了。
g
全局替换匹配的文本内容
p
一般使用p会配合 -n使用;-n 禁止sed编辑器输出。如果不加-n 就会出现上图中重复的现象
w file
将替换的结果信息输出到文件中
注意
在shell脚本中特殊字符需要进行转义 使用 \
行寻址
默认情况下sed命令会作用于整个文本数据的所有行,可以通过行寻址的方式来作用于特定的行或某些行
行寻址两种方式
命令格式 [address] command
address {
command1
command2
command3
}
数字形式表示行区间
1、只修改文本中的某一行
2、修改某个行区间的数据
3、也可以使用$表示到结尾
文本模式来过滤出行
文本模式来进行过滤只作用匹配文本模式的行上
也可以通过组合命令来执行
删除(d)
在删除的时候,最后用d命令来执行 。一般在使用sed的时候都是会通过配合正则表达式来进行数据删除
删除文本中包含50字符的所有行
插入和append
插入和append方式差不多,就数据插入到文本中,i 表示插入当前选中行的上一行,a表示插入到下一行
修改
修改,相当于是将整个作用的行全部替换掉
多行命令
在使用sed编辑器的基础命令时,你可能注意到了一个局限。所有的sed编辑器命令都是针对单行数据执行操作的。在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行。sed编辑器根据定义好的脚本命令一次处理一行数据,然后移到下一行重复这个过程。
如果用普通的sed编辑器命令来处理文本,就不可能发现这种被分开的短语。
sed编辑器包含三个可用的特殊文本处理命令
N | 将数据流中的下一行加进来创建一个多行组(multiline group)来处理 |
---|---|
D | 删除多行组中的一行 |
P | 打印多行组中的一行 |
1、使用普通删除命令,会将所有匹配的空行都删除
2、使用N命令,只会删除匹配到的下一行
sed编辑器会继续执行命令列表,该命令列表使用d命令来删除空白行。sed编辑器执行完命令脚本后,会从数据流中读取下一行文本,并从头开始执行命令脚本。因为sed编辑器再也找不到包含单词header的行了。所以也不会有其他行会被删掉。
3、合并某一行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步