打字猴:1.700436271e+09
1700436271 UNIX传奇:历史与回忆 [:1700434693]
1700436272 UNIX传奇:历史与回忆 4.5 grep命令
1700436273
1700436274
1700436275
1700436276
1700436277
1700436278
1700436279
1700436280 Unix生来就是命令行系统,也就是说,用户通过输入命令来运行程序,而不是像Windows或macOS那样通过鼠标指向和点击图标来运行程序。对于新手来说,命令行界面并不如指向和点击那样简单,但即使在只有中度经验的人手中,它也会高效得多。它能实现图形界面无法实现的自动化功能:命令序列可以从脚本中运行,输入单个指令就能作用于大量文件。
1700436281
1700436282 Unix一向拥有丰富的命令行小工具,也就是处理日常简单任务的程序。有六七个命令用来操作文件系统,如ls用于列出目录中的文件,颇似macOS上的访达或Windows上的资源管理器;cat和cp用于以各种方式复制文件;mv(“移动”,move的简写)用于重命名;rm用于删除文件。有一些命令用于处理文件内容,如wc用于计数,sort用于对文件进行排序;有一些命令用于比较文件,另外一些用于转换,如大小写转换;还有一些用于选择文件的一部分。(Unix用户会想到uniq、cmp、diff、od、dd、tail、tr和comm。)再加上另外十几个其他类别的工具,你就有了20个或30个命令,可以轻松完成各种基本任务。
1700436283
1700436284 实际上,工具如同语言中的动词,而文件则是动词所应用的名词。语言通常是不规则的,每个命令都有可选的参数来修改它的行为。例如,sort通常按字母顺序逐行排序,但加上参数之后,它就能按反序、数值、特定字段等方式排序。
1700436285
1700436286 要想用好Unix,和学习自然语言一样,必须学习类似于不规则动词族系的东西。当然,人们经常抱怨历史遗留的不规则现象,但偶尔试图修正这些不规则现象的努力在大多数情况下并不十分成功。
1700436287
1700436288 肯·汤普森原作的模式搜索程序grep启发了我们对“工具”而非仅止于“程序”的思考,堪称典范。肯在2019年谈及grep时说:
1700436289
1700436290 “我写了这个工具,但没有把它放在中央程序库里,因为我不想让人以为我专横独断。
1700436291
1700436292 “道格·麦基尔罗伊说,‘如果能在文件中寻找东西,那该多好。’我说,‘让我琢磨一晚上。’第二天早上,我给他看了我之前写的程序。他说,‘这正是我想要的。’
1700436293
1700436294 “从那时起,grep就变得既是名词又是动词,它甚至被OED[6]收录了。最难的是给它命名,最初名叫‘s’,代表搜索(search)。”
1700436295
1700436296 grep这个名字来自ed文本编辑器中的命令g/re/p,它列出所有符合正则表达式模式re的行,《牛津英语词典》中grep的条目(图4-2)释义正确。(鉴于OED已经赐予grep合法英语单词之地位,所以我既不使用特殊字体也不大写。)
1700436297
1700436298
1700436299
1700436300
1700436301 图4-2 OED中的grep词条
1700436302
1700436303 我个人最喜欢的grep往事是,1972年的一天,实验室有人给我打电话说:
1700436304
1700436305 “我注意到,把我的新袖珍计算器倒过来拿时,有些数字看起来会变成字母,如3变成E,7变成L。我知道你们的计算机上有一本字典。你们有没有办法告诉我,当我把计算器倒着拿的时候,可以在计算器上造出哪些词?”
1700436306
1700436307 图4-3展示了他看到的情形。
1700436308
1700436309
1700436310
1700436311
1700436312 图4-3 计算器屏幕上的BEHILOS字符
1700436313
1700436314 身在科研部门,能帮上真正遇到实际问题的人,感觉不错。于是,我问他倒着拿计算器能打出什么字母,他说“BEHILOS[7]”。我转身来到键盘前,输入以下命令:
1700436315
1700436316 grep ‘ˆ[behilos]*$’ /usr/dict/web2
1700436317
1700436318
1700436319
1700436320
[ 上一页 ]  [ :1.700436271e+09 ]  [ 下一页 ]