1. sed 编辑器
sed 编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed 编辑器的执行流程
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT
。
由于命令是按顺序逐行给出的,sed编辑器只需对数据流进行一遍处理就可以完成编辑操作。这使得 sed 编辑器要比交互式编辑器快得多,你可以快速完成对数据的自动修改。
调用 sed 命令的语法有以下两种办法
第一种:在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’
第二种:先将 sed 指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件
sed 命令的格式
sed [options] [script] [file]
或更清晰的划分格式
sed [-hnV][-e<script>][-f<script文件>][需要被编辑的文本文件]
sed的常用选项:
-r
:使用扩展正则表达式
-e
:它告诉 sed 将下一个参数解释为一个 sed 指令,当命令行上给出多个sed指令时才要使用-e
选项
-f
:后跟随的是保存了 sed 指令的文件
-i
:直接对内容进行修改,不加-i
时默认只是预览,不会对文件做实际修改
-n
:取消默认输出,sed 默认会输出所有文本内容,使用-n
参数后只显示处理过的行
sed中的编辑命令:
a
:新增, a 的后面可以接字串, 而这些字串会在新的一行出现(目前的下一行)~
c
:取代, c 的后面可以接字串, 这些字串可以取代 n1,n2 之间的行!
d
:删除, 因为是删除啊, 所以 d 后面通常不接任何咚咚
i
:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p
:打印, 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s
:取代, 可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法, ‘2s/Hello/Good/’
使用实例
sed '3aHello' file.txt # 向第三行后面添加 Hello 字符串,其中 3 表示文件行号,a 表示添加内容
sed '/123/aHello' file.txt # 向内容 123 后面添加 Hello,如果文件中有多行包括123,则每一行后面都会添加
sed '$aHello' file.txt # 在文件的最后一行添加 Hello 字符串
sed '/123/iHello' file.txt # 在包含 123 的行之前插入 Hello,如果有多行包含 123,则包含 123 的每一行之前都会插入 Hello 字符串
sed '4d' file.txt # 删除文件第四行内容
sed 's/123/Hello/g' file.txt # 将文本中所有的 123 都替换为 Hello