文档章节

Linux ed命令

wangxuwei
 wangxuwei
发布于 2018/05/16 00:11
字数 3091
阅读 86
收藏 0

Linux ed命令是文本编辑器,用于文本编辑。

ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。

ed命令并不是一个常用的命令,一般使用比较多的是vi 指令。但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。

语法

ed [-][-Gs][-p<字符串>][--help][--version][文件]

参数

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

实例

以下是一个 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 编辑器

这是文件的内容是:

$ cat readme.text 
My name is Titan. 
I am 24 years old. 
And I love Perl vrey much.

ed 命令简介

ed 命令简介:

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

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

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


ed 调用:

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

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


ed 命令格式为:

[address [,address]]command[parameters]

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

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


ed 地址:

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

.             当前行

$             文本最后一行

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

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

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

-             相当于 -1 行地址

+             相当于 +1 行地址

m,n             文本的第 m 到 n 行

,             文本的所有行

;             文本当前行到最后一行

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

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

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


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

.                   匹配任何单个字符。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\`                   匹配一个句子的边界

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


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

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

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

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

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

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

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

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

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

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

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

($)=           打印指定行行号

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

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

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

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

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

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

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

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

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

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

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

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

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

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

h                        打印最后一个错误说明

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

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

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

!cmd                    执行 shell 命令 cmd

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

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

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

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

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

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

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

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

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

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

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

更为详细之处请参阅 man info 手册

 

本文转载自:http://www.runoob.com/linux/linux-comm-ed.html

共有 人打赏支持
wangxuwei
粉丝 25
博文 332
码字总数 115454
作品 0
杭州
其他
私信 提问
Go语言,在Ubuntu9.10和Windows安装

工作环境:Ubuntu9.10 A、安装C语言工具 Go的工具链采用C语言编写,构建需要安装以下开发工具: GCC, C语言标准库, the parser generator Bison, make, awk, 和 ed (编辑器). 对于 OS X 系...

fuhao715
2011/03/21
0
0
Vim 的起源

我最近无意中发现一个名为Intel HEX的文件格式。据我所知,Intel HEX文件(使用.hex后缀)是通过将二进制文件变为十六进制数据来降低它的不可读性。明显它们由那些编写微控制器程序或者将数据...

祖冲之
2018/09/11
2.2K
19
每天一个linux命令(39):grep 命令

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是...

长平狐
2013/06/17
87
0
转在Linux下安装rar fou linux

在Linux下安装rar fou linux rar for linux 软件下载地址:http://www.rarsoft.com/download.htm 到目前为止最新的版本为4.10 beta 2,这是共享版本。 本文所用的Linux操作系统为: Centos 5...

萧敬
2013/07/07
0
0
Linux的uniq和diff命令

有两个有用的文件内容相关的命令,这里复习脑补一下。 uniq命令 uniq [选项] 文件 说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是...

HappyBKs
2015/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【结构型】- 享元模式

享元模式 作用:利用共享技术有效地支持大量细粒度对象的复用 享元模式状态 内部状态:在享元对象内部不随外界环境改变而改变的共享部分,存储于享元对象内部 外部状态:随着环境的改变而改变...

ZeroneLove
昨天
1
0
Vue 中使用UEditor富文本编辑器-亲测可用-vue-ueditor-wrap

一、Vue中在使用Vue CLI开发中默认没法使用UEditor 其中UEditor中也存在不少错误,再引用过程中。 但是UEditor相对还是比较好用的一个富文本编辑器。 vue-ueditor-wrap说明 Vue + UEditor + ...

tianma3798
昨天
4
0
php-fpm配置

php-fpm配置 修改bbs.wangzb.cc.conf配置文件,将端口9000改为9001,重新访问网站是失败的 修改配置文件 # vim /etc/nginx/conf.d/bbs.wangzb.cc.conf# nginx -s reloadfastcgi_pass 1...

wzb88
昨天
2
0
配置方案:Redis持久化RDB和AOF

Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘。当下次Redis重启时,...

linuxprobe16
昨天
6
0
介绍NoSQL最受欢迎的产品

MongoDB MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,Mon...

问题终结者
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部