今天在有土逼网看了一个很有意思的视频,想和大家分享一下。
用过 Linux 的人肯定都知道grep
指令,你有没有好奇过,这个奇怪的名字是怎么来的呢?
这会是一个很有意思的故事。
在远古时代,计算资源是极其有限的,内存大概只有32kb、64kb 这个级别,disk 也只有几M。这使得软件设计不得不极其简单。
unix 有一款文字编辑器,叫做ed
,作者是大名鼎鼎的Ken Thompson,下面这位:
ed
的指令都只有一个字符:
- p : print
- s : delete
- s : substitute
- a : append
- r : read
- w : write
ed
强大的地方在于,可以简单的操作多行:
1,10p
: 打印1-10行1,$p
: 打印所有行$d
: 删除最后一行
还有正则表达式,用//
包裹起来
/print/p
但是还有一个问题,内存是非常小的,可能装不下整个文件。
当时还有一位叫做Lee E. McMahon的计算机科学家从事text analysis 方向的工作。
他想通过text analysis的手段研究一下,The Federalist Papers (联邦党人文集,作者有很多很多人,很多学者想找出是谁写了哪一部分)的作者情况。The Federalist Papers 一共有85篇,加起来也就1M 左右,但是,ed
装不下啊。。
于是 Lee 把这个问题向Ken Thompson反应了,于是第二天,Ken Thompson对ed
的源码做了些修改,开发出了grep
,能够实现从多个文件中查找满足特定正则表达式的字符串。
ed
中有一个指令,叫做g
,global
单词的缩写,可以和其他指令结合使用,比如g/print/p
打印后面所有保护print
的行。
现在看出点东西来了吗:
g/re/p
复制代码
所以Ken Thompson把这个程序命名为grep
。
这个故事后面还有彩蛋:
Professor Brian Kernighan90年代在普林斯顿大学教书的时候,给学生们布置了一个任务,给你ed
的源代码(大概1800行 c 代码),给你一个星期的时间,写一个grep
程序出来。
结果表明:None of them are Ken Thompson ~
视频下面的这个评论也很有意思:
如果你像我一样真正热爱计算机科学,喜欢研究底层逻辑,欢迎关注我的微信公众号: