Linux 文档编辑 : ed 命令详解

ed命令是单行纯文本编辑器,它有命令模式(command mode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下:

A:切换到输入模式,在文件的最后一行之后输入新的内容;
C:切换到输入模式,用输入的内容替换掉最后一行的内容;
i:切换到输入模式,在当前行之前加入一个新的空行来输入内容;
d:用于删除最后一行文本内容;
n:用于显示最后一行的行号和内容;
w:<文件名>:一给定的文件名保存当前正在编辑的文件;
q:退出ed编辑器。

语法

ed(选项)(参数)
  1.  

选项

-G或——traditional:提供兼容的功能;
-p<字符串>:指定ed在command mode的提示字符;
-s,-,--quiet或——silent:不执行开启文件时的检查功能;
--help:显示帮助;
--version:显示版本信息。

 

  1. ed 命令简介:
  2.  
     
  3.  
    在 unix/linux 平台下,首先要学习的就是文本编辑,而 ed 编辑器是 unix/linux 操作系统下最简单、最典型
  4.  
    的文本编辑器,因此,学习 ed 编辑器能够帮助你很好的理解一般的文本操作,而且还可以为你以后学习 unix/linux
  5.  
    下的一些常用命令(如 grep,sed,...)打下基础。
  6.  
     
  7.  
    ed 编辑器是以行为单位对文本进行操作的编辑器,也就是说一次仅能编辑一行,非以全屏的方式来操作,而不像 vi/vim
  8.  
    那样是以整个屏幕框架为单位对文本进行编辑。ed 简单、易用,也正是由于其小巧玲珑,许多文本操作者现在仍然偏爱它,
  9.  
    使用它。
  10.  
     
  11.  
    ed 编辑器可以用于创建、修改、显示文本文件。当 ed 打开一文本文件时,将复制文件的内容到 ed 命令的缓存中, 在
  12.  
    ed 中的所有命令操作只作用于缓存中的内容,而不会对源文件有任何影响,除非对源文件进行 w(写) 操作。 ed 有命令模式
  13.  
    和输入模式两种状态,类似于 vi/vim 的两种模式,ed 在命令模式下输入的是命令,这些命令用来指定对编辑文本的操作;
  14.  
    ed 在输入模式下输入的是文本,这些文本将依照命令模式下输入的命令被添加或替换到文本中。当第一次被调用时,ed 默
  15.  
    认进入命令模式,当输入 a、c 或 i 命令后即进入输入模式,在输入模式下,单行输入 '.' 然后回车,则回到命令模式。
  16.  
     
  17.  
     
  18.  
    ed 调用:
  19.  
     
  20.  
    ed [-GVhl] [-p string] [file]
  21.  
     
  22.  
    注解:
  23.  
    file 指定将要编辑的文件(如果文件名以叹号开头 '!file',应用反斜杠引用叹号 '\!file',否则,ed 将视 file
  24.  
    命令的输出为编辑内容。)
  25.  
    -G 兼容模式
  26.  
    -V 输出 ed 版本信息
  27.  
    -h 显示 ed 帮助信息
  28.  
    -l 强制退出状态为 0(即使操作中出现错误)
  29.  
    -p string 指定命令模式下的提示符
  30.  
     
  31.  
     
  32.  
    ed 命令格式为:
  33.  
     
  34.  
    [address [,address]]command[parameters]
  35.  
     
  36.  
    地址(address,[,address]) 是用来指定命令(command)的作用范围的。如果没给出地址,则为默认地址。ed 读入文件后,当前
  37.  
    行默认为文件最后一行,如果文件为空,则当前行号设置为 0
  38.  
     
  39.  
    命令(command) 会根据指定的地址(或默认地址)对编辑文本进行操作。当输入一非法命令,ed 将会显示一问号 '?' 来提示
  40.  
    输入命令错误。
  41.  
     
  42.  
     
  43.  
    ed 地址:
  44.  
     
  45.  
    地址由下面基本的元素构成,其后也可跟加 '+''-'' ' 和数字来表示自己所需要的地址。
  46.  
     
  47.  
    . 当前行
  48.  
     
  49.  
    $ 文本最后一行
  50.  
     
  51.  
    n 文本第 n 行( n 为数字,下同;m 亦是 )
  52.  
     
  53.  
    -n 从文本当前行数起,向前第 n 行
  54.  
     
  55.  
    +n 从文本当前行数起,向后第 n 行
  56.  
     
  57.  
    - 相当于 -1 行地址
  58.  
     
  59.  
    + 相当于 + 1 行地址
  60.  
     
  61.  
    m,n 文本的第 m 到 n 行
  62.  
     
  63.  
    , 文本的所有行
  64.  
     
  65.  
    ; 文本当前行到最后一行
  66.  
     
  67.  
    /reg/ 从文本当前行数起,下一个匹配 reg 的行
  68.  
     
  69.  
    ?reg? 从文本当前行数起,上一个匹配 reg 的行
  70.  
     
  71.  
    'x 由 k 命令标记的行( x 为一小写字母 )
  72.  
     
  73.  
     
  74.  
    正则表达式如下:(只涉及 ed 所支持的正则表达式)
  75.  
     
  76.  
    . 匹配任何单个字符。
  77.  
     
  78.  
    [char-class] 匹配任何一个在 char-class 里的单个字符。如果中间出现 '- ' ,则意为其左边的字符和其右边的
  79.  
    字符之间的所有字符。例如,[abc] 匹配 a 或 b 或 c;[a-z] 匹配任意一个小写字母(a、b、c、
  80.  
    ...、z),[0-9] 匹配任意一个数字(0、1、2、...、9)。
  81.  
    char-class 也可以为一些字符集。如下:
  82.  
    [:alpha:] 相当于 [a-zA-Z]
  83.  
    [:lower:] 相当于 [a-z]
  84.  
    [:upper:] 相当于 [A-Z]
  85.  
    [:digit:] 相当于 [0-9]
  86.  
    [:alnum:] 相当于 [a-zA-Z0-9]
  87.  
    [:blank:] 匹配 ' '(空格)、 '\t '(制表符)
  88.  
    [:space:] 匹配 ' '(空格)、'\t '(制表符)、'\n '(新行)、'\ f'()、'\v '(垂直制表符)、'\ r'(回车符)
  89.  
    [:cntrl:] 匹配控制字符。在 ASCII 码中,这些控制字符是从八进制数字 000 到 037, 和 177 (DEL)
  90.  
    [:print:] 匹配 相当于 [:alnum:]、[:punct:] 和 空格
  91.  
    [:graph:] 匹配 相当于 [:alnum:] 、 [:punct:]
  92.  
    [:punct:] 匹配 `! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ' 等标点符号
  93.  
    [:xdigit:] 匹配十六进制字符 ' 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f'
  94.  
     
  95.  
    [^char-class] 匹配 [char-class] 的补集,即匹配任意一个不在 char-class 里的单个字符
  96.  
     
  97.  
    * 匹配前面的子表达式零次或多次。例如,'ab* ' 能匹配 "a" 以及 "abb"。 * 等价于'\{ 0,\} '
  98.  
     
  99.  
    \+ 匹配前面的子表达式一次或多次。例如,'ab\+ ' 能匹配 "ab" 以及 "abb",但不能匹配 "a"。\+ 等
  100.  
    价于 \{1,\}
  101.  
     
  102.  
    \? 匹配前面的子表达式零次或一次。例如,"word(s)\?" 可以匹配 "word" 或 "words" 。\? 等价于
  103.  
    \{0,1\}
  104.  
     
  105.  
    \{n,m\} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 "a{1,3}" 将匹配 "baaaaab"
  106.  
    中的前三个 a。'a{ 0, 1} ' 等价于 'a\? '。请注意在逗号和两个数之间不能有空格
  107.  
     
  108.  
    \{n,\} n 是一个非负整数。至少匹配n 次。例如,'a\{ 2,\} ' 不能匹配 "abc" 中的 'a ',但能匹配
  109.  
    "baaaaab"中的所有 a。'a\{ 1,\} ' 等价于 'a\+ '。'a\{ 0,\} ' 则等价于 'a* '
  110.  
     
  111.  
    \{n\} n 是一个非负整数。匹配确定的 n 次。例如,'a\{ 2\} ' 不能匹配 "bab" 中的 'a ',但是能匹配
  112.  
    "baab"中的两个 a
  113.  
     
  114.  
    ^ 匹配输入字符串的开始位置
  115.  
     
  116.  
    $ 匹配输入字符串的结束位置
  117.  
     
  118.  
    \< 匹配一个单词的前边界。例如,'\<el ' 匹配 "element",但不能匹配 "help"
  119.  
     
  120.  
    \> 匹配一个单词的后边界。例如,'ly\> ' 匹配 "lovely",但不匹配 "lying"
  121.  
     
  122.  
    \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\ b' 可以匹配"never" 中的 'e r',
  123.  
    但不能匹配"verb" 中的 'e r'
  124.  
     
  125.  
    \B 匹配非单词边界。'er\B ' 能匹配 "verb" 中的 'e r',但不能匹配 "never" 中的 'e r'
  126.  
     
  127.  
    \w 匹配任何非单词字符。等价于 '[^A-Za-z0 -9_] '
  128.  
     
  129.  
    \W 匹配任何非单词字符。等价于 '[^A-Za-z0 -9_] '
  130.  
     
  131.  
    \` 匹配一个句子的边界
  132.  
     
  133.  
    \(\) 定义向后引用。'\n '(n为一正整数)代表第 n 个括号中匹配的字符串
  134.  
     
  135.  
     
  136.  
    ed 命令:
  137.  
    ed 命令都是单个字符,其中一些命令有一些选项。如果一命令超过一行,应使 '\ ' 结束每一行。
  138.  
    命令如下:(括号内为默认地址)
  139.  
     
  140.  
    (.)a 切换到输入模式,将新输入的文本追加到指定行的后面,当前行被设为输入文本的最后一行
  141.  
     
  142.  
    (.)i 切换到输入模式,将新输入的文本插入到指定行的前面,当前行被设为输入文本的最后一行
  143.  
     
  144.  
    (.,.)c 切换到输入模式,将新输入的文本替换成指定行,当前行被设为输入文本的最后一行
  145.  
     
  146.  
    (.,.)d 删除指定行,如果被删除的文本后还有文本行,则当前行被设为该行,否则设为被删除的文本的
  147.  
    上一行
  148.  
     
  149.  
    (.+1) 无命令时,默认 p 命令,但打印下一行内容,当前行被设为打印行
  150.  
     
  151.  
    (.+1)zn 一次跳动 n 行,如果未指出 n ,默认当前终端屏幕大小,当前行被设为最后被打印的行
  152.  
     
  153.  
    (.,.)p 打印指定行,当前行被设为打印行的最后一行
  154.  
     
  155.  
    P ed 命令模式下提示符开关命令,默认提示符为 '* '
  156.  
     
  157.  
    (.,.)l 在每行最后加一 '$ ' 符号指定结尾,并打印输出
  158.  
     
  159.  
    (.,.)n 打印指定行号和内容,行号与行内容用制表符分割,当前行被设为打印行的最后一行
  160.  
     
  161.  
    ($)= 打印指定行行号
  162.  
     
  163.  
    (.,.)# 注释行,将被忽略
  164.  
     
  165.  
    (.)k char 用一小写字母标记指定行
  166.  
     
  167.  
    (.,.)s/reg/replacement/
  168.  
    (.,.)s/reg/replacement/g
  169.  
    (.,.)s/reg/replacement/n
  170.  
    替换指定行命令
  171.  
     
  172.  
    (.,.)s 重复上一次替换命令,当前行被设为最后一个被改变的行
  173.  
     
  174.  
    (1,$)g/reg/cmd-list 所有匹配 '/reg/ ' 的行执行 cmd-list 命令,在命令执行前,当前行被设为匹配行。当所有匹配
  175.  
    行执行完命令后,当前行被设定为最后一个匹配行。cmd-list 中每一行只能有一个命令,但有多
  176.  
    个命令时,应以 '\ ' 结束每一行
  177.  
     
  178.  
    (1,$)G/reg/ 与 g/reg/cmd-list 相似,但匹配的每一行所执行的命令由用户各个定义。
  179.  
     
  180.  
    (1,$)v/reg/cmd-list 与 g/reg/cmd-list 相反,指不匹配行
  181.  
     
  182.  
    (1,$)V/reg/ 与 G/reg/ 相反,指不匹配行
  183.  
     
  184.  
    (.,.+1)j 合并指定行内容,当前行被设为合并行
  185.  
     
  186.  
    (.,.)m(.) 移动左边源指定行到右边目的指定行后,当前行被设为移动行的最后一行
  187.  
     
  188.  
    (.,.)t(.) 复制左边源指定行到右边目的指定行后,当前行被设为复制行的最后一行
  189.  
     
  190.  
    (.,.)y 复制指定行到缓存,当前行不改变
  191.  
     
  192.  
    (.)x 复制缓存内容到指定行后,当前行被设为复制行的最后一行
  193.  
     
  194.  
    u 撤销上一次命令,当前地址被设为上一次地址
  195.  
     
  196.  
    h 打印最后一个错误说明
  197.  
     
  198.  
    H 错误说明开关,默认不输出
  199.  
     
  200.  
    e file 编辑文件并设定文件名
  201.  
     
  202.  
    E file 强制编辑文件,同 e file,但丢失以前的修改,不做警告
  203.  
     
  204.  
    !cmd 执行 shell 命令 cmd
  205.  
     
  206.  
    e !cmd 先将ed 缓冲区清除,替换 cmd 命令的输出
  207.  
     
  208.  
    f file 设置文件名,如果每给出 file 参数,则打印文件名
  209.  
     
  210.  
    ($)r file 把指定文件内容追加到指定行后,当前行被设为追加文本的最后一行
  211.  
     
  212.  
    ($)r !cmd 把命令的输出追加到指定行后,当前行被设为追加文本的最后一行
  213.  
     
  214.  
    (1,$)w file 保存指定文本内容到指定文件(覆盖保存)
  215.  
     
  216.  
    (1,$)W file 保存指定文本内容到指定文件(追加保存),当前行不改变
  217.  
     
  218.  
    (1,$)w !cmd 输出指定文本内容到 cmd 的标准输入,当前行不改变
  219.  
     
  220.  
    (1,$)wq flie 保存指定文本内容到指定文件(覆盖保存),并退出编辑器
  221.  
     
  222.  
    q 退出 ed 编辑器,退出前若所作的修改没保存,发出警告
  223.  
     
  224.  
    Q 强制退出 ed 编辑器,同 q 命令,但退出前若所作的修改没保存,不警告
  225.  
     
  226.  
    P ed 命令提示符显示开关。 '* ' 为 ed 默认提示符,利用 ed 命令 -p 选项,其可被更改为任意字符
  227.  
     
  228.  
    更为详细之处请参阅 man info 手册
  229.  

 

实例

 

以下是一个 Linux ed 完整实例解析:

$ ed              <- 激活 ed 命令 
a                 <- 告诉 ed 我要编辑新文件 
My name is Titan. <- 输入第一行内容 
And I love Perl very much. <- 输入第二行内容 
.                 <- 返回 ed 的命令行状态 
i                 <- 告诉 ed 我要在最后一行之前插入内容 
I am 24.          <- 将“I am 24.”插入“My name is Titan.”和“And I love Perl very much.”之间 
.                 <- 返回 ed 的命令行状态 
c                 <- 告诉 ed 我要替换最后一行输入内容 
I am 24 years old. <- 将“I am 24.”替换成“I am 24 years old.”(注意:这里替换的是最后输的内容) 
.                 <- 返回 ed 的命令行状态 
w readme.text     <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可) 
q                 <- 完全退出 ed 编辑器 <- 激活 ed 命令 
a                 <- 告诉 ed 我要编辑新文件 
My name is Titan. <- 输入第一行内容 
And I love Perl very much. <- 输入第二行内容 
.                 <- 返回 ed 的命令行状态 
i                 <- 告诉 ed 我要在最后一行之前插入内容 
I am 24.          <- 将“I am 24.”插入“My name is Titan.”和“And I love Perl very much.”之间 
.                 <- 返回 ed 的命令行状态 
c                 <- 告诉 ed 我要替换最后一行输入内容 
I am 24 years old. <- 将“I am 24.”替换成“I am 24 years old.”(注意:这里替换的是最后输的内容) 
.                 <- 返回 ed 的命令行状态 
w readme.text     <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可) 
q                 <- 完全退出 ed 编辑器 

这是文件的内容是:

$ cat readme.text 
My name is Titan. 
I am 24 years old. 
And I love Perl vrey much. .text 
My name is Titan. 
I am 24 years old. 
And I love Perl vrey much. 
  1.  
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HarkerYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值