1 min read

Grep 的由来

如果你用过 ed 编辑器,你应该知道,除非你要求它,否则它不会显示出文件内容 – 因为它在交互显示出现来前就被写出来,那时很多使用 ed 的人还只有一台打印机可以输出呢。

经常地,你也没想它显示所有的行,只要一小部分就行。它当然能搞定这个。你可以说“给我显示前 5 行”,又或者“显示下面的 8 行”又或者“给我显示 100-110 行”,这都可以实现。

不过有时你可能想说,“给我显示所有包含 x 的行”,因为你只兴趣这些包含 ‘x’ 的文字。ed 也可以搞定。

ed 中搜索,你使用 /

于是 /foo 就会查找下一个 ‘foo‘ 实例

不过你可能不想要“下一个“实例,你想要所有实例。那么你需要一个全局搜索。这是命令 g/foo

目前为止一切都合逻辑吧?

一旦你找到这些行,你想看看它们。于是你告诉 ed 把它们打印出来。这样的命令是 g/foo/p – 全局搜索 ‘foo’ 并且打印出匹配的行。

非常不错。不过 ed 可以更聪明,它不仅仅查找字符串字面匹配的,它还能处理正则表达式。比如你可以用 g/1/p 来显示所有以数字开始的行。又或者 g/;$/p 打印出所有以分号结束的行。

于是这个 ed 用户大量使用的”给我显示匹配的行“的功能就可以总结为“全局搜索匹配正则表达式的行并且打印出来” – 或者,用 ed 的形式表述,g/regular expression/p。再简单点,g/re/p

是的。Grep。这就是它的由来了,感谢 ed。

本篇节译自这一篇内容,很有意思的文章。


  1. 0-9 [return]
报告问题 修订

如果你有自建 https 代理的需求,欢迎尝试 Phantom,一键搭建,方便快捷。查看 demo