0
点赞
收藏
分享

微信扫一扫

三剑客-sed(流编辑器)

求索大伟 2022-12-13 阅读 122

简单描述

功能:sed --> Stream Editor 主要用来自动编辑一个或多个文件,简化对文件的反复操作(非交互流编辑器)
作用:按行处理,先将一行内容读入到"模式空间(Pattern space)"进行相关代码处理,最后在输出到屏幕
空间:两种空间 "模式空间(Pattern space)" <==> "保持空间(Holding space)" 他们之间的内容可以使用指令相互转换,初始时内容都为空

sed 由一个或多个sed命令组成,因此被称为sed程序
sed 可以理解为是一个双层for循环,第一次循环是读取每一行,第二次循环是针对每一行进行单独处理
sed 已经读取过的行无法再次被读取,所以sed不提供往回取数据的表达式
sed 在读取数据到"模式空间"内不会把对应的换行符加入"\n",只有在做其他处理(比如:p打印)等操作时才会在末尾进行输出"\n"

操作流程

  1、首先读取一行到"模式空间"
2、在"模式空间"中执行命令,如果使用了{}或-e指定了多个命令,sed将依次执行每个命令
3、打印"模式空间"的内容,然后清空"模式空间"
4、重复上述过程,直到文件结束

两种空间

注意:"追加"的原理,先在当前空间的尾部追加一个换行符"\n",最后在将空间内的值追加到换行符尾部

x 将"模式空间"和"保持空间"中的内容"交换" Ps <==> Hs
h 将"模式空间"中的内容"覆盖"到"保持空间" Ps ==> Hs
H 将"模式空间"中的内容"追加"到"保持空间",内容之间使用\n Ps ==>> Hs
g 将"保持空间"中的内容"覆盖"到"模式空间" Hs ==> Ps
G 将"保持空间"中的内容"追加"到"模式空间",内容之间使用\n Hs ==>> Ps

三剑客-sed(流编辑器)_sed

基本用法

sed [options] 'command' file

1、选项(options)

短选项

长选项

描述

-c

--copy

(常用)该选项应和-i配合使用;使用-i时,通常在命令执行完成后,sed使用临时文件来保持更改后的内容,然后把该临时文件重命名为输入文件;但这样会改变文件的所有者或文件权限,配合c选项,可以保持文件所有者或权限不变

-e

--expression=

(常用)允许多个命令同时顺序编辑

-n

--quiet、--silent

(常用)取消默认输出

-r

--regexp-extended

(常用)启用扩展正则表达式

-i[bak]

--in-place[=bak]

(常用)直接修改读取的文件内容,而不是由屏幕输出,[bak]可以在修改前备份原文件

-s

--separate

(常用)将输入文件视为各个独立的文件而不是一个长的连续输入,每个文件行号都将被重置

-f s.sed

--file=s.sed

从指定文件内输入sed参数

-h


显示命令行选项列表(帮助文档)

-l N

--line-length=N

指定"l"命令的换行期望长度(N=0意味着完全不换行的长行,如果不指定,则70个字符就换行)


--posix

关闭所有 GNU 扩展


--help

输出sed命令行的简单帮助信息并退出

-u

--unbuffered

使用尽量少的空间缓冲输入和输出行

-V

--version

打印版本和版权信息

-z

--null-data 、--zero-terminated

以空串符号"\0"而不是换行符"\n"作为输入流的行分隔符

2、命令(command)

命令

描述

a

新增   在当前行后面添加一行或多行文本

b

跳转   无条件跳转到标签,如果标签省略则跳转到尾部继续进行下一个sed循环

c

取代  使用新的文本改变本行的内容

d

删除  删除"模式空间"中所有内容,并立即退出当前循环,即读取下一行

D

删除  删除"模式空间"中第一个换行符\n之前的内容,开始下一次循环;删除之后"模式空间"内没有内容则退出循环进入下一个sed,如果还剩内容则继续从头执行循环,即D后面的命令不会被执行,默认也不会输出

e

执行  表示执行命令

F

输出  输出当前处理的输入流的文件名(需要sed4.2以上版本支持)

g

覆盖  将"保持空间"中的内容"覆盖"到"模式空间"

G

追加  将"保持空间"中的内容"追加"到"模式空间",内容之间使用\n

h

覆盖  将"模式空间"中的内容"覆盖"到"保持空间"

H

追加  将"模式空间"中的内容"追加"到"保持空间",内容之间使用\n

i

插入  在当前行上面插入一行或多行文本

l

打印  以一种明确的方式打印"模式空间",显示特殊字符(类似cat -A 或者 cat -v显示的功能)

L

打印  忽略"模式空间"内的特殊字符(例如: 11\n22 输出 11 22)

n

读取  读取下一行内容"覆盖"当前"模式空间"内容

N

读取  读取下一行内容"追加"到"模式空间"的尾部

p

打印  打印"模式空间"里面的内容

P

打印  打印"模式空间"中第一个换行符\n之前的内容

q

退出  立即退出sed,使其不再执行后面的命令,可以指定退出状态码 q 10

Q

退出  立即退出sed,使其不再执行后面的命令,可以指定退出状态码 Q 10

s

替换  s/old/new/[gpIiMme]修饰符

t

跳转  "s"命令替换"成功"则跳转到标签,如果标签省略则跳转到尾部继续进行下一个sed循环

T

跳转  "s"命令替换"失败"则跳转到标签,如果标签省略则跳转到尾部继续进行下一个sed循环

v

版本  指定sed脚本必须高于此版本的sed程序才能运行,默认指定的版本号是"4.0"

x

交换  将"模式空间"和"保持空间"中的内容"交换"

y

替换  字符一一替换,例如: y/abc/xyz/ 将a全部替换成x,将b全部替换成y,将c全部替换成z

z

清空  清空模式空间中的内容;内容清掉,变成一个空行

r file

条件匹配后将文件file的所有内容读入到指定位置

R file

条件匹配后将文件file的一行内容读入到指定位置

w file

将匹配的结果输出到指定文件file中

W file

将"模式空间"中第一个换行符\n之前的内容写入到文件file中

举报

相关推荐

0 条评论