操作系统

Linux:sed命令详解

1. 简介 sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。 sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。 2. 定址 定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。 地址是一个数字,则表示行号;是“$"符号,则表示最后一行。例如: 只显示指定行范围的文件内容,例如: 地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。例如: 3.命令与选项 sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。 3.1 sed命令 命令  功                能  a\  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行  c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行  i\  在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行  d  删除行  h  把模式空间里的内容复制到暂存缓冲区  H  把模式空间里的内容追加到暂存缓冲区  g  把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容  G  把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面  l  列出非打印字符  p  打印行  n  读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理  q  结束或退出sed  r  从文件中读取输入行  !  对所选行以外的所有行应用命令  s  用一个字符串替换另一个  g  在行内进行全局替换  w  将所选的行写入文件  x  交换暂存缓冲区与模式空间的内容  y  将字符替换为另一字符(不能对正则表达式使用y命令) 3.2 sed选项  选项                          功              能  -e  进行多项编辑,即对输入行应用多条sed命令时使用  -n  取消默认的输出  -f  指定sed脚本的文件名 4.退出状态 sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。 5.正则表达式元字符 与grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是,sed使用的正则表达式是括在斜杠线"/"之间的模式。 如果要把正则表达式分隔符"/"改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n '\o^Myop' datafile 元字符...
阅读全文