grep软件在编辑与编务工作中的应用

来源 :职业·下旬 | 被引量 : 0次 | 上传用户:rg595091068
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  在编辑与编务工作中,如果能灵活运用各种软件,就会显著提高效率。下面介绍一下grep软件在这方面的应用。
  grep本是UNIX/Linux中的命令行程序(类似于DOS程序),现在有多个Windows版本。它能够利用称为“正则表达式”的技术,输出文件中具有某种规律(或称模式)的文本行。这种规律可以是一个简单的字符串,如“111”或 “computer”表示含有“111”或“computer”的行;也可以是复杂的字符串,如“1.3”可以匹配含有113,123,1_3(即在1和3之间有任意一个字符)的行,因为“.”表示匹配任意单个字符;而“12*3”可以匹配含有13,123,1223,12223(即在1和3之间有任意个2)的行,此处“*”表示“零个或多个前面的单个字符或字符组合”。
  一、快速剔除书目中的三级标题
  有一批教材(70多本)的目录保存在同一个纯文本文件C:contents.txt中,现在要利用该文件制作一份书目。图书目录一般都有三级标题,而在制作书目时,只需要一级和二级标题。该文件中,标题前面没有空行。三级标题序号的形式有三种,第一种形如“1.1.1”,即数字之间有一个英文句号;第二种形式如“1  1  1”,即数字之间有一个很宽的空格;第三种形式如“1.2.1”,即数字之间有一个英文句号紧跟一个空格。章号和节号最多可能为两位数,高位均不为零,而小节号只有一位数,不可能为零。如果删掉以这三种形式开头的文本行,也就完成了剔除三级标题的工作。
  这个工作很难用Word完成,手工处理又相当耗时。而使用grep软件就可以快速达到目的。
  上述三级标题序号的第一种形式可以表示为“一个或两个数字之后紧跟一个英文句号再紧跟一个或两个数字再紧跟一个英文句号再紧跟一个数字”。而经过分析,第二种形式中的“很宽的空格”与第三种形式中的“一个英文句号紧跟一个空格”实际上都是两个“不可打印的”字符,因此后两种形式可以用同一种模式表示,即“一个或两个数字之后紧跟两个不可打印的字符再紧跟一个或两个数字再紧跟两个不可打印的字符再紧跟一个数字”。而每个标题各占一行,便于使用grep软件。了解了这些信息,就可以使用grep软件剔除三级标题了。
  首先要下载grep。grep包含在名为CygwinPortable的软件包中,可以在浏览器中输入以下链接下载该软件:
  http://cdnetworks-kr-1.dl.sourceforge.net/project/cygwinportable/cygwinportable/CygwinPortable 0.2/CygwinPortable-0.2.zip
  解压后进入其文件夹,双击其中的CygwinPortable.exe图标,会出现一个类似于DOS窗口的界面,在其中可以输入很多命令,包括grep。
  grep的命令格式如下:
  $ grep'匹配模式'原始文件
  匹配模式前后均有空格,并且要加上单引号。模式内部不能有空格(除非要匹配空格)。匹配后的结果将输出到屏幕上。“$”是显示在屏幕上的提示符,不必输入。原始文件的内容不受影响。
  例如,书目中每本书的书号都是一个五位的数字,且单独放在一行,前面没有空格。要输出这些书号,则可以输入以下命令:
  $ grep'^[0-9]{5}'contents.txt
  按下回车键,屏幕上将输出所有书号,每行一个。“^”出现在匹配模式的开头,表示从文本行的开头进行模式匹配。如果漏掉这个符号,则会输出所有包括五位数字的行(如某行文字中含有“80486”,则该行也会输出)。方括号表示匹配字符列表中的任意一个字符,如[0-9]表示匹配任意一个阿拉伯数字,而[a-zA-Z]表示匹配任意一个大写或小写英文字母。{n}表示欲匹配字符的个数,此处为5。
  若不希望输出匹配某个模式的文本行,例如要删除所有书号,则可在模式前加入-v选项,即:
  $ grep -v'^[0-9]{5}'contents.txt
  将输出不带书号的目录。
  通常,输出结果需要进一步处理,因此应将其用“>”保存在文件中,命令格式如下:
  $ grep'匹配模式'原始文件 > 结果文件
  例如
  $ grep'^[0-9]{5}'contents.txt > result.txt
  即可将所有书号保存在result.txt文件中,每个书号一行。若result.txt已经存在,则以前的内容将全被删掉。结果文件名称前如不加路径,则表示保存在当前路径。
  下面只要用两步操作就可以完成书目处理。
  (1)执行如下命令:
  $ cd c:
  $ grep -v'^[1-9][0-9]*[^[:print:]]{2}[1-9][0-9]*
  [^[:print:]]{2}[1-9]'contents.txt > step1.txt
  若“^”是方括号中的第一个字符,则不再表示匹配文本行的开头,而是对其后面的模式取相反结果。[:print:]表示可打印字符。因此[^[:print:]]{2}表示匹配两个不可打印字符。注意单引号括住的部分没有空格。
  打开step1.txt,可以看到,序号形如“1  1  1”和“1. 1. 1”的三级标题都被删掉了。
  (2) 执行如下命令:
  $ grep -v'^[1-9][0-9]*.[1-9][0-9]*.[1-9][0-9]*'step1.txt > step2.txt
  此处,用“.”匹配英文句号,因为单个“.”可以匹配任意字符,而前面加上反斜线(称为转义符)后,就只能匹配英文句号。
  打开step2.txt,可以看到,序号形如“1.1.1”的三级标题也都被删掉了,任务完成。
  二、查找稿件中的不规范术语
  grep还可以从一个文件中获取欲匹配的模式,并且一次搜索多个文件。命令如下:
  $ grep –f 含匹配模式的文件原始文件
  例如,某位作者为其编写的C 图书提供了随书源文件。部分文件的代码注释中使用了不规范的术语,如,把“面向对象”写成了“物件导向”,把“内存”写成了“记忆体”。现在要确定哪些文件含有不规范术语。如果逐一查找,比较费时。此时可以把不规范的术语写在一个名为jargons.txt的文件中,每行一个。将文件放在源文件所在目录,假设是C:source。然后执行如下命令:
  $ cd c:
  $ cd source
  $ grep –f jargons.txt *.cpp
  屏幕上就会输出所有含有不规范术语的源文件名。
  请注意:在进行以上输入时,要在英文状态下进行,并区分大小写(文中涉及操作均为小写)。而且grep只能操作纯文本文件。由于版式限制,一些操作排成了两行(实际上均应为一行)。
  参考文献:
  [1]陈向群,等译. Brian W Kernighan, Rob Pike. UNIX编程环境 [M].北京:机械工业出版社,1999.
  (作者单位:机械工业出版社计算机分社)
其他文献
摘要:就业是民生之本,是事关经济和社会发展全局的重要问题,是落实“三个代表”重要思想和科学发展观的具体表现。随着劳动力市场“新三化”建设的不断推进,职业指导作为市场就业服务的核心内容,在促进就业方面的作用已越来越成为社会共识。公共就业培训服务机构的职业指导,如何更充分地开展人本服务,为失业人员开展具有特色、针对性的指导,需要我们进一步探索和总结。本文试从阐述开展广州市失业人员职业指导的必要性入手,
目的:研究冠心病心律失常患者采用24h动态心电图检查诊断的临床效果。方法:选定样本为2019年5月—2020年5月于我院心内科就诊的480例冠心病心律失常患者,依据检查诊断方案差
掌握了液压元件的职能符号,便于分析和识读液压系统回路、分析液压元件的应用,更可以帮助初学者认识液压元件。  一、根据结构引出职能符号  1.液压泵  液压泵的职能符号,圆形代表泵体的转子,黑三角形代表油液的流动方向,三角形相连的直线为压油管路,另一条直线表示吸油管路。单向变量泵职能符号是一个三角形,有一个倾斜的箭头。  通过液压泵的职能符号,可以引出多数职能符号的共同之处:当一个职能符号中,有一个
绿色节能理念下的现代建筑设计不仅能缓解能源紧张,还有利于实现社会经济的可持续发展。因此,为了充分发挥其作用,文章概述了绿色节能理念,对绿色节能理念下的现代建筑设计要
考试是学校检查学生学业成绩和教学效果的一种办法,是学校教学工作的重要环节。补考是考试(含考查)环节的组成部分,是考试的延续。对于学校考试,一般来说,有考试就有补考,这是很正常的现象。客观公正地评定补考课程成绩,减少补考给学生带来的不利影响,有利于学生身心健康发展,培养良好的学习习惯。  一、目前常用的补考课程成绩评定与记载方法  目前,大多数学校补考课程成绩评定与记载方法仍然是:补考卷面成绩在60
当今社会的信息工程化及高校专业认证要求大学生具有解决复杂工程问题的能力,本文就复杂工程问题的内涵界定及特点进行分析,阐述了解决复杂软件工程问题能力的培养策略,对该
目的:探讨超声实时引导下经皮经肝胆管引流术治疗急性梗阻性胆管炎的临床应用效果。方法:选取2018年1月—2020年3月入院接受治疗的40例急性梗阻性胆管炎患者作为观察对象,所
苏浅唱调动工作会“两头不着”吗?    DB公司商业客户部小区高级销售代表苏浅唱与小区经理李坤闹矛盾后,暗地里时时留意着DB内外的工作机会。正好大客户部小区梁诗洛组里有人离开,她需要招一个人,于是苏浅唱毫不犹豫地向梁诗洛表明了自己想调到她的組里。梁诗洛当即表示愿意要苏浅唱,并催她尽快办理调动。苏在申请调动时,与李坤大吵了一通,然后直接找商业客户部大区经理陈丰在她的调动报告上签了字。但是意外的事情发