免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14945 | 回复: 18
打印 上一主题 下一主题

ed 命令简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-07 09:01 |只看该作者 |倒序浏览
来 CU 已两月有余,收获不小,贡献不大,心中颇有芥蒂
恰近日学 ed 命令,自以为对初学者有益,一时心血来潮
现翻译 man info 之 ed 命令如下,与大家共享:

  1. ed 命令简介:

  2. 在 unix/linux 平台下,首先要学习的就是文本编辑,而 ed 编辑器是 unix/linux 操作系统下最简单、最典型
  3. 的文本编辑器,因此,学习 ed 编辑器能够帮助你很好的理解一般的文本操作,而且还可以为你以后学习 unix/linux
  4. 下的一些常用命令(如 grep,sed,...)打下基础。

  5. ed 编辑器是以行为单位对文本进行操作的编辑器,也就是说一次仅能编辑一行,非以全屏的方式来操作,而不像 vi/vim
  6. 那样是以整个屏幕框架为单位对文本进行编辑。ed 简单、易用,也正是由于其小巧玲珑,许多文本操作者现在仍然偏爱它,
  7. 使用它。

  8. ed 编辑器可以用于创建、修改、显示文本文件。当 ed 打开一文本文件时,将复制文件的内容到 ed 命令的缓存中, 在
  9. ed 中的所有命令操作只作用于缓存中的内容,而不会对源文件有任何影响,除非对源文件进行 w(写) 操作。 ed 有命令模式
  10. 和输入模式两种状态,类似于 vi/vim 的两种模式,ed 在命令模式下输入的是命令,这些命令用来指定对编辑文本的操作;
  11. ed 在输入模式下输入的是文本,这些文本将依照命令模式下输入的命令被添加或替换到文本中。当第一次被调用时,ed 默
  12. 认进入命令模式,当输入 a、c 或 i 命令后即进入输入模式,在输入模式下,单行输入 '.' 然后回车,则回到命令模式。


  13. ed 调用:

  14. ed [-GVhl] [-p string] [file]

  15. 注解:
  16. file                指定将要编辑的文件(如果文件名以叹号开头 '!file',应用反斜杠引用叹号 '\!file',否则,ed 将视 file
  17.                 命令的输出为编辑内容。)
  18. -G                兼容模式
  19. -V                输出 ed 版本信息               
  20. -h                显示 ed 帮助信息
  21. -l                强制退出状态为 0(即使操作中出现错误)
  22. -p string         指定命令模式下的提示符


  23. ed 命令格式为:

  24. [address [,address]]command[parameters]

  25. 地址(address,[,address]) 是用来指定命令(command)的作用范围的。如果没给出地址,则为默认地址。ed 读入文件后,当前
  26. 行默认为文件最后一行,如果文件为空,则当前行号设置为 0。

  27. 命令(command) 会根据指定的地址(或默认地址)对编辑文本进行操作。当输入一非法命令,ed 将会显示一问号 '?' 来提示
  28. 输入命令错误。


  29. ed 地址:

  30. 地址由下面基本的元素构成,其后也可跟加 '+'、'-'、' ' 和数字来表示自己所需要的地址。

  31. .             当前行

  32. $             文本最后一行

  33. n             文本第 n 行( n 为数字,下同;m 亦是 )

  34. -n             从文本当前行数起,向前第 n 行

  35. +n             从文本当前行数起,向后第 n 行

  36. -             相当于 -1 行地址

  37. +             相当于 +1 行地址

  38. m,n             文本的第 m 到 n 行

  39. ,             文本的所有行

  40. ;             文本当前行到最后一行

  41. /reg/             从文本当前行数起,下一个匹配 reg 的行

  42. ?reg?             从文本当前行数起,上一个匹配 reg 的行

  43. 'x             由 k 命令标记的行( x 为一小写字母 )


  44. 正则表达式如下:(只涉及 ed 所支持的正则表达式)

  45. .                   匹配任何单个字符。

  46. [char-class]           匹配任何一个在 char-class 里的单个字符。如果中间出现 '-' ,则意为其左边的字符和其右边的
  47.                    字符之间的所有字符。例如,[abc] 匹配 a 或 b 或 c;[a-z] 匹配任意一个小写字母(a、b、c、
  48.                     ...、z),[0-9] 匹配任意一个数字(0、1、2、...、9)。
  49.                     char-class 也可以为一些字符集。如下:
  50.                    [:alpha:] 相当于 [a-zA-Z]
  51.                    [:lower:] 相当于 [a-z]
  52.                    [:upper:] 相当于 [A-Z]
  53.                    [:digit:] 相当于 [0-9]
  54.                    [:alnum:] 相当于 [a-zA-Z0-9]
  55.                    [:blank:] 匹配 ' '(空格)、 '\t'(制表符)
  56.                    [:space:] 匹配 ' '(空格)、'\t'(制表符)、'\n'(新行)、'\f'()、'\v'(垂直制表符)、'\r'(回车符)
  57.                    [:cntrl:] 匹配控制字符。在 ASCII 码中,这些控制字符是从八进制数字 000 到 037, 和 177 (DEL)
  58.                    [:print:] 匹配 相当于 [:alnum:]、[:punct:] 和 空格
  59.                    [:graph:] 匹配 相当于 [:alnum:] 、 [:punct:]
  60.                    [:punct:] 匹配 `! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ' 等标点符号
  61.                    [:xdigit:] 匹配十六进制字符 '0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f'

  62. [^char-class]            匹配 [char-class] 的补集,即匹配任意一个不在 char-class 里的单个字符

  63. *                    匹配前面的子表达式零次或多次。例如,'ab*' 能匹配 "a" 以及 "abb"。 * 等价于'\{0,\}'

  64. \+                   匹配前面的子表达式一次或多次。例如,'ab\+' 能匹配 "ab" 以及 "abb",但不能匹配 "a"。\+ 等
  65.                    价于 \{1,\}

  66. \?                   匹配前面的子表达式零次或一次。例如,"word(s)\?" 可以匹配 "word" 或 "words" 。\? 等价于
  67.                      \{0,1\}

  68. \{n,m\}           m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 "a{1,3}" 将匹配 "baaaaab"
  69.                    中的前三个 a。'a{0,1}' 等价于 'a\?'。请注意在逗号和两个数之间不能有空格

  70. \{n,\}                   n 是一个非负整数。至少匹配n 次。例如,'a\{2,\}' 不能匹配 "abc" 中的 'a',但能匹配
  71.                   "baaaaab"中的所有 a。'a\{1,\}' 等价于 'a\+'。'a\{0,\}' 则等价于 'a*'

  72. \{n\}                   n 是一个非负整数。匹配确定的 n 次。例如,'a\{2\}' 不能匹配 "bab" 中的 'a',但是能匹配
  73.                    "baab"中的两个 a

  74. ^                   匹配输入字符串的开始位置

  75. $                   匹配输入字符串的结束位置

  76. \<                   匹配一个单词的前边界。例如,'\<el' 匹配 "element",但不能匹配 "help"

  77. \>                   匹配一个单词的后边界。例如,'ly\>' 匹配 "lovely",但不匹配 "lying"

  78. \b                   匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',
  79.                    但不能匹配"verb" 中的 'er'

  80. \B                   匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

  81. \w                   匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'

  82. \W                   匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'

  83. \`                   匹配一个句子的边界

  84. \(\)                   定义向后引用。'\n'(n为一正整数)代表第 n 个括号中匹配的字符串


  85. ed 命令:
  86. ed 命令都是单个字符,其中一些命令有一些选项。如果一命令超过一行,应使 '\' 结束每一行。
  87. 命令如下:(括号内为默认地址)

  88. (.)a            切换到输入模式,将新输入的文本追加到指定行的后面,当前行被设为输入文本的最后一行

  89. (.)i            切换到输入模式,将新输入的文本插入到指定行的前面,当前行被设为输入文本的最后一行

  90. (.,.)c          切换到输入模式,将新输入的文本替换成指定行,当前行被设为输入文本的最后一行

  91. (.,.)d          删除指定行,如果被删除的文本后还有文本行,则当前行被设为该行,否则设为被删除的文本的
  92.                 上一行

  93. (.+1)          无命令时,默认 p 命令,但打印下一行内容,当前行被设为打印行

  94. (.+1)zn        一次跳动 n 行,如果未指出 n ,默认当前终端屏幕大小,当前行被设为最后被打印的行

  95. (.,.)p         打印指定行,当前行被设为打印行的最后一行

  96. P               ed 命令模式下提示符开关命令,默认提示符为 '*'

  97. (.,.)l          在每行最后加一 '$' 符号指定结尾,并打印输出

  98. (.,.)n         打印指定行号和内容,行号与行内容用制表符分割,当前行被设为打印行的最后一行

  99. ($)=           打印指定行行号

  100. (.,.)#         注释行,将被忽略

  101. (.)k char      用一小写字母标记指定行

  102. (.,.)s/reg/replacement/
  103. (.,.)s/reg/replacement/g
  104. (.,.)s/reg/replacement/n
  105.                               替换指定行命令

  106. (.,.)s                   重复上一次替换命令,当前行被设为最后一个被改变的行

  107. (1,$)g/reg/cmd-list     所有匹配 '/reg/' 的行执行 cmd-list 命令,在命令执行前,当前行被设为匹配行。当所有匹配
  108.                          行执行完命令后,当前行被设定为最后一个匹配行。cmd-list 中每一行只能有一个命令,但有多
  109.                          个命令时,应以 '\' 结束每一行

  110. (1,$)G/reg/              与 g/reg/cmd-list 相似,但匹配的每一行所执行的命令由用户各个定义。

  111. (1,$)v/reg/cmd-list      与 g/reg/cmd-list 相反,指不匹配行

  112. (1,$)V/reg/              与 G/reg/ 相反,指不匹配行

  113. (.,.+1)j                          合并指定行内容,当前行被设为合并行

  114. (.,.)m(.)                移动左边源指定行到右边目的指定行后,当前行被设为移动行的最后一行

  115. (.,.)t(.)                 复制左边源指定行到右边目的指定行后,当前行被设为复制行的最后一行

  116. (.,.)y                   复制指定行到缓存,当前行不改变

  117. (.)x                     复制缓存内容到指定行后,当前行被设为复制行的最后一行

  118. u                        撤销上一次命令,当前地址被设为上一次地址

  119. h                        打印最后一个错误说明

  120. H                        错误说明开关,默认不输出

  121. e file                    编辑文件并设定文件名

  122. E file                    强制编辑文件,同 e file,但丢失以前的修改,不做警告

  123. !cmd                    执行 shell 命令 cmd

  124. e !cmd                  先将ed 缓冲区清除,替换 cmd 命令的输出

  125. f file                    设置文件名,如果每给出 file 参数,则打印文件名

  126. ($)r file                 把指定文件内容追加到指定行后,当前行被设为追加文本的最后一行

  127. ($)r !cmd               把命令的输出追加到指定行后,当前行被设为追加文本的最后一行

  128. (1,$)w file               保存指定文本内容到指定文件(覆盖保存)

  129. (1,$)W file              保存指定文本内容到指定文件(追加保存),当前行不改变

  130. (1,$)w !cmd            输出指定文本内容到 cmd 的标准输入,当前行不改变

  131. (1,$)wq flie             保存指定文本内容到指定文件(覆盖保存),并退出编辑器

  132. q                  退出 ed 编辑器,退出前若所作的修改没保存,发出警告

  133. Q                  强制退出 ed 编辑器,同 q 命令,但退出前若所作的修改没保存,不警告

  134. P                  ed 命令提示符显示开关。 '*' 为 ed 默认提示符,利用 ed 命令 -p 选项,其可被更改为任意字符

  135. 更为详细之处请参阅 man info 手册
复制代码

初次翻译,现丑

纵有千虑,终有一失,如有不当,还望指正,改之

声明:本文可于互联网间任意转载,但需指明 源自www.chinunix.net
                                                                                 --爱知
                                                                                于 CU 两周月

[ 本帖最后由 爱知 于 2008-9-7 09:24 编辑 ]

评分

参与人数 1可用积分 +10 收起 理由
寂寞烈火 + 10 精品文章

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2008-09-07 09:04 |只看该作者
对于新手来说,不结合例子是很难上手的,下面给出一些示例
看示例时,注意命令前后文本的变化,进而理解命令的作用

(不能概括所有的命令,若想了解,请自己动手练习
注意:示例之间有一定上下文联系,应从前到后阅读
               其中 '#' 后的中文部分是解释、说明 )

  1. $cat a                                #显示文件 a 的内容
  2. this is the first line
  3. this is the second line
  4. this is the third line
  5. this is the forth line
  6. this is the fifth line
  7. $ed a                                #ed 编辑 a 文件
  8. 116
  9. P                                #显示默认命令模式提示符 '*'
  10. *,p                                #'*' 为默认命令模式提示符, ',' 表示文件全部的行,'p'打印命令:该行命令
  11. this is the first line              #即解释为“打印文件全部行”
  12. this is the second line
  13. this is the third line
  14. this is the forth line
  15. this is the fifth line
  16. *2p                                #打印第二行
  17. this is the second line
  18. *3-1p                                #打印第二行
  19. this is the second line
  20. *3+1p                                #打印第四行
  21. this is the forth line
  22. *q                                #退出命令
  23. $
复制代码

  1. $ed                                #调用 ed
  2. a                                #添加文本命令
  3. this is the first line
  4. this is the second line
  5. this is the third line
  6. this is the fourth line
  7. this is the fifth line
  8. .                                #结束添加文本
  9. ,p                                #打印全部编辑文本
  10. this is the first line
  11. this is the second line
  12. this is the third line
  13. this is the fourth line
  14. this is the fifth line
  15. 2                                #打印第二行
  16. this is the second line
  17. n                                #显示行号与行内容
  18. 2       this is the second line
  19. =                                #显示文本总行数
  20. 5
  21. .=                                #显示当前行号
  22. 2
  23. i                                #插入文本命令
  24. this is the insert line
  25. .                                #结束插入文本
  26. n                                #显示行号与行内容
  27. 2       this is the insert line
  28. ,p                                #打印全部编辑文本
  29. this is the first line
  30. this is the insert line
  31. this is the second line
  32. this is the third line
  33. this is the fourth line
  34. this is the fifth line
  35. c                                #更改当前行
  36. this is the first change line
  37. this is the second change line
  38. .                                #结束插入更改文本
  39. ,p                                #打印全部编辑文本
  40. this is the first line
  41. this is the first changed line
  42. this is the second changed line
  43. this is the second line
  44. this is the third line
  45. this is the fourth line
  46. this is the fifth line
  47. g/changed/n                        #打印含有“changed”的行号和行内容
  48. 2       this is the first change line
  49. 3       this is the second change line
  50. 2,3d                                #将第2到3行删除
  51. ,p                                #打印全部编辑文本
  52. this is the first line
  53. this is the second line
  54. this is the third line
  55. this is the fourth line
  56. this is the fifth line
  57. wq b                                #保存文本内容到 b 文件并退出
  58. 117
  59. $ls                                #shell 命令:列出当前文件夹下的文件名
  60. a  b
  61. $
复制代码

  1. $ed b                                #ed 编辑 b 文件
  2. 117
  3. ,p
  4. this is the first line
  5. this is the second line
  6. this is the third line
  7. this is the fourth line
  8. this is the fifth line
  9. 2s/second/2th/
  10. ,p                                #打印全部编辑文本
  11. this is the first line
  12. this is the 2th line
  13. this is the third line
  14. this is the fourth line
  15. this is the fifth line
  16. ,s/this is //                #将所有行中第一个“this is ”替换为“”,即删除
  17. ,p                                #打印全部编辑文本
  18. the first line
  19. the 2th line
  20. the third line
  21. the fourth line
  22. the fifth line
  23. wq                                #保存文件并退出
  24. 74
  25. $cat b                                #shell 命令,显示文件 b
  26. the first line
  27. the 2th line
  28. the third line
  29. the fourth line
  30. the fifth line
  31. $
复制代码

  1. $ed b                                #ed 编辑 b 文件
  2. 74
  3. ,p                                #打印全部编辑文本
  4. the first line
  5. the 2th line
  6. the third line
  7. the fourth line
  8. the fifth line
  9. 2,4m5                                #将第2到4行文本内容移到第5行后
  10. ,p                                #打印全部编辑文本
  11. the first line
  12. the fifth line
  13. the 2th line
  14. the third line
  15. the fourth line
  16. u                                #撤销上一次命令
  17. ,p                                #打印全部编辑文本
  18. the first line
  19. the 2th line
  20. the third line
  21. the fourth line
  22. the fifth line
  23. 2t0                                #复制第2行文本到第0行,亦即第一行前
  24. ,p                                #打印全部编辑文本
  25. the 2th line
  26. the first line
  27. the 2th line
  28. the third line
  29. the fourth line
  30. the fifth line
  31. u                                #撤销上一次命令
  32. n                                #显示行号与行内容
  33. 5       the fifth line
  34. r !date                        #将 shell 命令 date 的输出添加到当前行后
  35. 43
  36. ,p                                #打印全部编辑文本
  37. the first line
  38. the 2th line
  39. the third line
  40. the fourth line
  41. the fifth line
  42. 2008年 09月 03日 星期三  20:49:25 CST
  43. r !cal                                #将 shell 命令 cal 的输出添加到当前行后
  44. 145
  45. ,p                                #打印全部编辑文本
  46. the first line
  47. the 2th line
  48. the third line
  49. the fourth line
  50. the fifth line
  51. 2008年 09月 03日 星期三  20:49:25 CST
  52.        九月  2008
  53. 日 一 二 三 四 五 六
  54.     1  2  3  4  5  6
  55. 7  8  9 10 11 12 13
  56. 14 15 16 17 18 19 20
  57. 21 22 23 24 25 26 27
  58. 28 29 30
  59. q                                #退出 ed
  60. ?                                #“?”提示输入错误,该错误为退出钱没保存文本
  61. wq                                #保存文本并退出
  62. 262
  63. $
复制代码

[ 本帖最后由 爱知 于 2008-9-7 09:26 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-07 10:08 |只看该作者
谢谢分享,学习了..

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-09-07 11:01 |只看该作者
感谢楼主提供强文分享!

论坛徽章:
0
5 [报告]
发表于 2008-09-07 11:37 |只看该作者
新手路过,,,

[ 本帖最后由 Orilla 于 2008-9-7 11:48 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-09-07 21:13 |只看该作者
好贴!

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
7 [报告]
发表于 2008-09-08 08:58 |只看该作者
支持爱知..精神可嘉啊..

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2008-09-08 09:04 |只看该作者
支持原创!

论坛徽章:
0
9 [报告]
发表于 2008-09-08 09:39 |只看该作者
ed和sed有何差别呢

论坛徽章:
0
10 [报告]
发表于 2008-09-08 09:44 |只看该作者

回复 #9 prc 的帖子

ed is an editor

sed is a filter
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP