程序员肖邦的博客 享受编程和技术所带来的快乐

sed入门教程系列之:基本原理介绍

2017-01-05
肖邦

sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义。网上也有很多关于 sed 的教程,我也是以学以致用的心态来学习 sed 的常见的用法,并进行系统的总结,内容基本覆盖了 sed 的大部分的知识点。文中的内容比较简练,加以实际示例来帮助去理解 sed 的使用。

本系列文章目录:

基本原理介绍

1、sed介绍

sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大。是贝尔实验室的 Lee E.McMahon 在 1973 年到 1974 年之间开发完成,目前可以在大多数操作系统中使用,sed 的出现作为 grep 的继任者。

与 vim 等编辑器不同,sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。

sed 基本上就是在玩正则模式匹配,所以,玩 sed 的人,正则表达式一般都比较强。

2、sed工作原理

sed 会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为 模式空间,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

3、正则表达式概念

  • 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。
  • 正则表达式就是用于描述这些规则的工具,换句话说,正则表达式就是记录文本规则的代码。
  • 许多程序设计语言都支持利用正则表达式进行字符串操作。
  • 在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

4、正则表达式的匹配过程

简单描述一下正则表达式的匹配过程,就是拿正则表达式所表示的字符串去和原文字符串内容去匹配,直到匹配到原文内容字符串中的一个完整子串就表示匹配成功。

举个例子,有一行文件内容 “this is better desk”,这里用 “esk” 去匹配,匹配过程是这样的:首先拿 e 去匹配文件行内容,从 this 开始,直到 better 的 e,第一个字符匹配成功,接着 s 去匹配 better 字符 e 后边的 t 字符,没有匹配成功;

然后重新拿 esk 中的 e 去和 better 的第二个 t 去匹配,没有成功,接着原始内容的下一个字符,直到 desk 中的 e 字符,逐个匹配 s,k 字符,到此为止,esk 成功匹配,正则表达式匹配完毕,整个过程就是这样,即使再复杂的正则表达式的匹配过程也是按照此过程来进行的。


Comments

Content