Content-Type: text/x-zim-wiki Wiki-Format: zim 0.4 Creation-Date: 2011-04-07T15:50:46+08:00 ====== ed ====== Created Thursday 07 April 2011 ed是unix系统的标准编辑器,最初由Ken Thompson 编写,起源与qed。 ed为匹配模式提供了正则表达式,基于ed的正则表达式渗透到了整个UNIX系统:grep和sed使用的正则表达式几乎与ed相同 egrep,awk,ex扩展了ed的正则表达式;shell的文件名匹配语法虽然与正则表达式不同,但基本思想是相同的。 ed提供命令来操纵连续的行和与模式匹配的行,并在这些行上进行修改。 每个ed命令都是但字符,多数命令前面可以加一到两个行号,否则使用缺省的行号。行号的说明可以用其在文件中的绝对位置指定, 其他特殊的行号有:$代表最后一行,.表示当前行,或采用正则表达式搜索到的下一行,以及所有这些行号的组合。 行号可以与+-符号组合起来使用,当单独使用+-时是相对与当前行的。 用**单独的逗号**表示行号行时,其含义是整个文档。 ed能记住上次使用的模式,所以可以用//或??来重复搜索,且模式搜索都会回绕。 ed记录了最后操作所在的行:如最后显示的行,添加文本或修改文本或读一个文件后新内容的最后一行,这一行用.标记,成为当前行。 每个命令都可以对.有一个定义,通常是将其设置为该命令影响的最后一行。 替换命令s用于将某个字符串替换为另一个字符串,除非跟着命令g,否着只有行中最左边出现的模式被替换。s命令本身并不显示被修改的行, 除非在后面使用p,事实上大多数的ed命令都实在默默的工作,但几乎任何命令后都可以用p显示命令影响后行的结果。 可以用u命令取消最进的替换,但.必须设置为被替换的行。 当在ed中的某些字符出现在一个搜索模式或s命令的左边时,也具有特殊含义,这些字符被称为元字符,而使用它们的模式被称为正则表达式。 包含*的正则表达式匹配最左边最长的串。 全局命令g和v适合有正则表达式选择的多行的一个或多个其它命令,g命令最常用于多行的显示,替换或删除。 m.ng/regrep/command m,nv/regrep/commands gv命令前可以冠以行号来限定范围,缺省为1,$ g/.../命令 对所有匹配正则表达式的行执行命令。 m,n m d 把第m行到n行的内容移到地d行之后 m,n t d 用于移动和复制的命令的m、d命令的目标行不能落在m~n-1之内,如果没有指定源文本行,这默认使用当前行。 命令=显示最后一行的行号, .= 显示当前行号,显示后当前行不改变。 k命令用于标记行,标记适合用于文本的大块移动。 行可以通过j命令连接起来(没有附加的空格)。 nr filename 读文件,并将其添加到行n后,把当前行设置为读取 内容的最后一行 m,nw filename 把行m到n的内容写到文件中,不改变当前行 m,n W filename 。。。。。添加到。。。。。 w,W命令的缺省范围是整个文件,r是最后一行。 ed记得使用的第一个文件名,该名可以用命令行中取得,或者用r或w命令取得,命令f显示或改变被记住的文件名。 f 显示被记住的文件名 f filename 设置被记住的文件名。 命令e用记住的文件或新的文件来重新设置ed e 开始重新编辑被记住的文件 e filename 开始编辑文件 e命令的保护方式同q命令,如果缓冲区没有被保存,第一次e将引起一个错误信息。 命令一览表 命令 含义 .a 增加文本,自导一个只包含.的行为止 .,.c 改变行,新文本的结束方式同a .,.d 删除行 e filename 用文件重新初始化ed,若filename省略则ed用记住的文件名初始化 f filename 设置记忆文件 1,$g/正则表达式/命令 对每个匹配正则表达式的行执行命令 .i 在行前插入文本,结束方式同a .,.+1j 把多行连成一行 .kc 用字母c设置行biaoji .,.l 显示行,把不可见字符标记为可见 .,.m 行号 把当前行移到指定行后 .,.p 显示行 P 在以后的命令模式下显示提示符星号 q 退出,若缓冲区为修改则给出?提示,再一次q时立即退出,Q 为不保存改变而退出, $r filename 读文件 .,.s/正则表达式/新表达式字符串/ 把任何与正则表达式匹配的内容替换为新表达式 .,.t 行号 把当前行复制到指定的行后 .u 取消行中的上一次改变 1,$v/正则表达式/命令 在每个不语正则表达式匹配的行上执行命令 1,$w filename 把所有行写到文件中,W为添加到文件末尾 x 进入加密模式 !command-line 执行命令,而不退出ed (.+1) 回车 显示下一行内容 n 显示绝对行号的内容,n=0,1,2... . 当前行行号,或显示当前行的内容 $ 最后一行行号或显示最后一行内容 /正则表达式/ 与正则表达式匹配的下一行,当在$时回绕的奥第一行开始 ?正则表达式? 与上相反 `c 跳到标记为c的行 n1+n2 跳到n1+n2的行 N1,N2 行N1到N2 N1;N2 把当前行设为N1,然后跳到N2