sed的工作流程
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。sed把当前正在处理的行保存在一个临时缓冲区中,这个缓冲区称为模式空间或临时缓冲。sed处理完模式空间中的行后(即在该行执行完sed后),就把该行发送到屏幕上(除非之前有命令删除这一行或取消打印操作),sed每处理完一行就将其从模式空间中删除,然后将下一行读入模式空间,进行处理或显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时临时缓冲区中,对这个副本进行编辑,所以不会修改或破坏原文件。
定址
定址用于决定那些行用于编辑。地址的形式可以是数字,正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行。
如果指定的地址是一个数字,则这个数字代表行号。美元符号可以用来指代输入文件的最后一行。如果给出的是逗号分隔的两个行号,那么需要处理的地址就是这两行之间的范围(包括这两行在内)。范围可以是数字,正则表达式或二者的结合。
格式:
sed 'command' filename(s)
范例:
sed '1,3d' myfile #删除myfile的第1~3行 sed -n '/[Ff]iher/p' myfile #这打印myfile中匹配fishe或Fisher的行
sed命令
sed命令告诉sed对指定行做何种操作,包括打印、删除、修改等。
下表列出了命令选项,并说明他们如何控制色的的行为。
命令 |
功能 |
---|---|
a\ |
在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 |
c\ |
用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行 |
i\ |
在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 |
d |
删除行 |
h |
把模式空间里的内容复制到暂存缓冲区 |
H |
把模式空间里的内容追加到暂存缓冲区 |
g |
把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 |
G |
把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 |
l |
列出非打印字符 |
p |
打印行 |
n |
读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 |
q |
结束或退出sed |
r |
从文件中读取输入行 |
! |
对所选行以外的所有行应用命令 |
s |
用一个字符串替换另一个 |
替换标志 |
|
g |
在行内进行全局替换 |
w |
将所选的行写入文件 |
x |
交换暂存缓冲区与模式空间的内容 |
y |
将字符替换为另一字符(不能对正则表达式使用y命令) |
sed选项
选项 |
功能 |
---|---|
-e |
进行多项编辑,即对输入行应用多条sed命令时使用 |
-n |
取消默认的输出 |
-f |
指定sed脚本的文件名 |
注:如果需要使用多条命令,或者在某个地址范围内嵌套地址,就必须将命令用花括号括起来,每行只写一条命令,或者用分号分隔同一行上的多条命令。
感叹号(!)是用于否定。例如:
sed 'fisher/d' myfile 是删除myfile中,所有包含fisher命令的行。而命令:
sed 'fisher/!d' myfile 则是删除myfile中所有不包含fisher的行。