1.sed 是一种非交互编辑器,sed 是逐行处理文件,sed 把当前正常处理的行保存在一个临时的缓冲区中,这个缓冲区称为模式空间。sed处理完模式空间的行后,就把该行发送到屏幕上。sed 每处理完一行就将其从模式空间中删除。

2.sed 命令

命令

功能

\a

在当前行后添加一行或多行

\c

用新文本修改(替换)当前行中文本

d

删除行

\i

在当前行之前插入文本

h

把模式空间里的内容复制到暂存缓冲区

H

把模式空间里的内容追加到暂存缓冲区

g

取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容

G

取出暂存缓冲区的内容,将其复制到模式空间,追加该处原有内容

l

列出非打印字符

p

打印行

n

读入下一输入行,并从下一条命令而不是第一条命令开始对其处理

q

结束或退出sed

r

从文件中读取输入行

!

对所选行以外的所有行应用命令

s

用一个字符串替换另一个

替换标志

g

在行内进行全局替换

p

打印行

w

将行写入文件

x

交换暂存缓冲区与模式空间的内容

y

将字符转换为另一字符(不能对正则表达式使用y命令)

选项

功能

-e

允许多项编辑

-f

指定sed 脚本文件名

-n

取消默认的输出


 

 

 

元字符

功能

示例

示例的匹配对象

^

行首定位符

/^love/

配置所有以love开头的行

$

行尾定位符

/love$/

匹配所有以love结尾的行

.

配置除换行符外的单个字符

/l..e/

匹配包含字母l , 后跟两个任意字符,再跟字母e的行

*

匹配零个或多个前导字符

/*love/

匹配在零个或多个空格紧跟着模式love的行

[]

匹配指定字符组内的任一字符

/[Ll]ove/

匹配包含love和Love的行

[^]

匹配不在指定字符组内的任一字符

/[^A-KM-Z]ove/

匹配包含ove,但ove之前的那个字符不在A至K或M至Z之间的行

\(..\)

保存已匹配的字符

s/\(love\)able/\1er/

标记元字符之间的模式,并将其保存为标签1,之后可以用\1来引用它。最多可以定义9个标签。在这个示例中,love被保存在寄存器1里,之后被替换串引用,结果loveable被替换为lover。

&

保存查找串以便在替换串中引用

s/love/**&**/

符号&代表查找串。字符串love将替换前后各加了两个星号的引用,即love变成**love**

\<

词首定位符

/\<love/

匹配包含以love开头的单词的行

\>

词尾定位符

/love\>/

匹配包含以love结尾的单词的行

x\{m\}

连续m个x

/o\{5\}/

分别匹配出现连续5个字母o,至少5个连续的o,或5~10个连续的o 的行。

x\{m,\}

至少m个x

/o\{5,\}/

x\{m,n\}

至少m个,但不超过n个x

/o\{5,10\}/