1. 语法
sed工具从命令行所指定的文件或标准输入中获取输入流,除非明确指定输出目标,否则sed将把结果输出到标准输出。sed的命令行语法如下:
sed [-n] program [file-list] sed [-n] -f program-file [file-list]
参数program指命令行中的sed程序,参数program-file表示一个包含了sed程序的文件的完整路径名,参数file-list表示sed将要处理的普通文件的完整路径名。
全写 | 简写 | 说明 |
---|---|---|
--file program-file | -f program-file | 使sed从指定文件中而不是命令行中读取程序。 |
--in-place[=suffix] | -i[suffix] | 就地编辑文件。 |
--help | 概述sed的用法。 | |
--quiet | -n | 指示sed不会将文本行复制到标准输出。 |
2. 编辑器基础
sed程序由符合如下语法的一行或多行命令构成:
[address[ ,address]] instruction [argument-list]
其中address是可选的,如果省略address,那么sed将对输入中的所有行进行处理。instruction是一些用于改变文本的编辑指令。argument-list中参数的数目和类型取决于指令instruction。如果想把多个sed命令放到同一行,可以使用分号";"来分隔命令。
行号作为地址可以用来选择某一行,"$"表示输入中的最后一行。正则表达式作为地址可以用来选择那些包含与正则表达式相匹配的字符串的行。如果没有指定地址,那么sed将选择所有的行,提供一个地址将使指令作用于由该地址选择的每一行输入,提供两个地址将使得指令作用于成组的输入行。
3. 指令
指令 | 说明 |
---|---|
d | 删除指令导致sed不输出被选择的行。 |
n | 下一条指令输出当前选择的行,然后从输入中读入下一行。 |
a | 追加指令在当前选择的行之后插入一行或多行文件。 |
i | 插入指令与a相同,只不过它是将文本添加到选定的行之前。 |
c | 修改指令与a和i类追念 ,不同的是它将选定的行修改为新的文本。 |
s | 替换指令与vim中的类似。 |
p | 打印指令将选定的行写入标准输出。 |
w file | 写指令与p类似,不同的是它将输出写入到指定文件中。 |
r file | 读指令读出指定文件的内容并添加到选定的行之后。 |
q | 退出命令使得sed立即结束执行。 |
4. 控制结构
控制结构 | 说明 |
---|---|
! | 使得sed后面与其同一行的指令作用于没有被该命令选中的每一行地址。 |
{} | 将一组指令括起来,则这组指令将作用于它前面的地址选定的行。 |
分支指令 | 注:建议不使用。 |
:label | 标识sed程序中的一个位置。 |
b [label] | 无条件转移控制到label标识的命令。 |
t [label] | 如果最近读取行使Substitute指令匹配成功,则转移控制到label标识的命令。 |
5. Pattern区和Hold区
sed中有两个缓冲区,所有命令都是工作在Pattern区上的。Pattern区中保存着sed刚刚从输入中读取的行。作为临时缓冲区,Hold区可以在操作Pattern区中的数据时用来暂存数据。Pattern区和Hold区之前进行数据传送的命令如下:
命令 | 说明 |
---|---|
g | 将Hold区中的内容复制到Pattern区中,Pattern区中原来的内容将会丢失。 |
G | 将一个换行符和Hold区中的内容追加到Pattern区中的内容之后。 |
h | 将Pattern区中的内容复制到Hold区中,Hold区中原来的内容将会丢失。 |
H | 将一个换行符和Pattern区中的内容附加到Hold区中的内容之后。 |
x | 交换Pattern区和Hold区中的内容。 |
转载于:https://blog.51cto.com/hanviseas/1143744