Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381809
  • 博文数量: 114
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1219
  • 用 户 组: 普通用户
  • 注册时间: 2015-02-07 21:23
文章分类

全部博文(114)

文章存档

2018年(1)

2017年(5)

2016年(87)

2015年(21)

我的朋友

分类: 系统运维

2017-10-13 17:52:36


  1. 使用 ed 进行编辑
  2. 上一篇cat命令使用链接字符(-)指定标准输入并写到一个新文件,虽然这个单命令行程序非常简单,但它的缺点在于创建了一个新文件,希望将文本插入原始文件,更好的方法是使用即将介绍的 ed
  3. 顾名思义,行编辑器 ed 对输入文件的行执行编辑。它将整个文件读入自己的缓冲区,对该副本执行指定的操作,并可选地将缓冲区写到磁盘。您可以在编辑操作中指定任何数量的行,并且这些操作可以在一个序列中进行组合和指定。这些事实使得 ed 成为在脚本中使用的理想选择。以如下格式指定操作:

  4. [address]command [text]
  5. address 指定要处理的一行或多行(缺省为当前行),并且可以通过多种方式进行指定。单字符的 command 是要对指定行执行的操作。对于脚本中的特别单命令行程序,可以使用 echo 将一组命令和文本管道传输给 ed,从而以非交互式的方式使用它。

  6. ( echo 'OPERATION'; echo 'OPERATION';
  7. ... echo 'wq' ) | ed -s FILENAME
  8. 如果在操作中输入文本,应该回显一个句点 (.) 来指示输入结束。最后的 wq 写入文件并退出。-s 选项使 ed 静默地操作,并禁止所有正常输出。
  9. 幸运的是,ed 的基本寻址方法和命令是相当标准化的。表 2 描述了主要的寻址形式。表 3 给出了命令。

  10. 表 1. 在 ed 中对行寻址
  11. 选项          描述
  12. .           此选项对当前行寻址(缺省地址)。
  13. number      此选项对第 number 行寻址。可以按逗号分隔的范围 (first,last) 对行寻址。0 代表缓冲区的开头(第一行之前)。
  14. -number     此选项对当前行之前的第 number 行寻址。如果没有 number,则减号对紧跟在当前行之前的行寻址。
  15. +number     此选项对当前行之后的第 number 行寻址。如果没有 number,则加号对紧跟在当前行之后的行寻址。
  16. $           此选项对最后一行寻址。
  17. ,           此选项对第一至最后一行寻址,包括第一行和最后一行(与 1,$ 相同)。
  18. ;           此选项对当前行至最后一行寻址。
  19. /pattern/   此选项对下一个包含与 pattern 匹配的文本的行寻址。
  20. ?pattern?   此选项对上一个包含与 pattern 匹配的文本的行寻址。


  1. 表 2. 主要的 ed 命令
  2. 命令                                    描述
  3. a                                 此命令在指定的地址之后追加文本。
  4. c                                 此命令将指定的地址更改为给定的文本。
  5. d                                 此命令删除指定地址处的行。
  6. i                                 此命令在指定的地址之前插入文本。
  7. q                                 此命令在将缓冲区保存到磁盘后终止程序并退出。
  8. r file                            此命令读取 filespec 的内容并将其插入指定的地址之后。
  9. s/pattern/replacement/            此命令将匹配 pattern 的文本替换为指定地址中的 replacement 文本。
  10. w file                            此命令将指定的地址写到 file。如果没有 address,则此命令缺省使用整个缓冲区。

在文件开头插入文本,第二部分
通过可在脚本中使用的 ed 单命令行程序,您可以容易地在文件开头插入文本。插入操作是使用 ed 并通过 a 命令将给定文本追加到第 0 行(文件开头)来完成的:
[root@i src]# cat file 
This is the end.
[root@i src]# (echo '0a'; echo 'This is the beginning.'; echo '.'; echo 'wq') | ed -s file
[root@i src]# cat file 
This is the beginning.
This is the end.




若要在文件开头插入另一个文件的内容,可以使用 r 命令:
[root@i src]# cat file1 
test..


[root@i src]# (echo '0r file1'; echo 'wq') | ed file  #-s可以选择静默模式不输出
40
7
47
[root@i src]# cat file 
test..
This is the beginning.
This is the end.


在给定字符串之后插入文本
您可以使用 ed 将任何数量的文本行插入文件中任意行之前或之后。若要在第一个包含给定字符串的行之后插入,可以将该字符串包括在斜杠中,并在后面跟着 a 命令以追加随后的文本。与前面一样,各个行使用一个句点结束,并使用 wq 写入文件并退出。
当您希望在文件中的特定位置追加文本块时,此项技术就会派上用场:
[root@i src]# ( echo '/begin/a'; echo 'This is the middle.'; \
> echo '.'; echo 'wq') | ed -s file
[root@i src]# 
[root@i src]# cat file
test..
This is the beginning.
This is the middle.
This is the end.


在给定字符串之后插入一个文件:
[root@i src]# (echo '/END OF PART I/r test.txt'; echo 'wq') | ed file

删除尾随空格
通过使用 s 命令并替换一个空替换字符,您可以删除尾随空格:


[root@i src]# cat -vet file 
test.. $
This is the beginning.   $
This is the middle.$
This is the end.$
test$
[root@i src]# (echo ',s/ *$//'; echo 'wq') | ed -s file 
[root@i src]# cat -vet file 
test..$
This is the beginning.$
This is the middle.$
This is the end.$
test$




阅读(1357) | 评论(0) | 转发(0) |
0

上一篇:cat命令

下一篇:awk命令入门

给主人留下些什么吧!~~