每条指令由pattern和procedure组成,pattern一般为‘/’分割的正则表达式(也有可能是行号),procedure则是一连串编辑命令。
- 读入新的一行内容到缓存空间(被称为模式空间-pattern space)
- 取出第一条指令,判断是否匹配pattern
- 若不匹配,返回2,取下一条指令
- 若匹配,则针对缓存的行执行后面的编辑命令;完成后,返回2,取下一条指令
- 当所有指令都应用完之后,输出缓存行的内容;返回1,继续取新的一行
- 所有行都处理完,则结束
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA
input:
名称 | 命令 | 语法 | 说明 |
---|---|---|---|
替换 | s | [address]s/pattern/replacement/flags | 替换匹配的内容 |
删除 | d | [address]d | 删除匹配的行 |
插入 | i | [line-address]i\text | 在匹配行的前方插入文本 |
追加 | a | [line-address]a\text | 在匹配行的后方插入文本 |
行替换 | c | [address]c\text | 将匹配的行替换成文本text |
打印行 | p | [address]p | 打印在模式空间中的行 |
打印行号 | = | [address]= | 打印当前行行号 |
打印行 | l | [address]l | 打印在模式空间中的行,同时显示控制字符 |
转换字符 | y | [address]y/SET1/SET2/ | 将SET1中出现的字符替换成SET2中对应位置的字符 |
读取下一行 | n | [address]n | 将下一行的内容读取到模式空间 |
读文件 | r | [line-address]r file | 将指定的文件读取到匹配行之后 |
写文件 | w | [address]w file | 将匹配地址的所有行输出到指定的文件中 |
退出 | q | [line-address]q | 读取到匹配的行之后即退出 |
● n: 一个数字(取值范围1-512),表明仅替换前n个被pattern匹配的内容;
● g: 表示全局替换,替换所有被pattern匹配的内容;
● p: 仅当行被pattern匹配时,打印模式空间的内容;
● w file:仅当行被pattern匹配时,将模式空间的内容输出到文件file中;
当替换命令中pattern和地址相同时,可以省略pattern中的内容,例如:
sed '/substitute command/{s//&("s")/;s/^/+ /}'paragraph.txt
其中&表示之前匹配的内容。
replacement中的几个特殊元字符:
● &: 被pattern匹配的内容;
●\num: 被pattern匹配的第num个分组(正则表达式中的概念,.. 括起来的部分称为分组;
●\: 转义符号,用来转义&,\, 回车等符号
取下一行命令n:
n命令为将下一行的内容提前读入,并且将之前读入的行(在模式空间中的行)输出到屏幕,然后后续的命令会应用到新读入的行上。
高级命令:
读下一行N:
N命令将下一行的内容读取到当前模式空间,但是同n命令不一样的地方是N命令并没有直接输出当前模式空间中的行,而是把下一行追加到当前模式空间,两行之间用回车符\n连接。
删除行D:
该命令删除模式空间中第一行的内容,而它对应的小d命令删除模式空间的所有内容。D不会导致读入新行,相反它会回到最初的编辑命令,重要应用在模式空间剩余的内容上。
打印行P:
P命令与p命令一样是打印模式空间的内容,不同的是前者仅打印模式空间的第一行内容,而后者是打印所有的内容。
名称 | 命令 | 说明 |
---|---|---|
保存(Hold) | h/H | 将模式空间的内容复制或者追加到保持空间 |
取回(Get) | g/G | 将保持空间的内容复制或者追加到模式空间 |
交换(Exchange) | x | 交换模式空间和保持空间的内容 |
command1
command2
/pattern/b top
command3