您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > grep+awk+sed命令调研文档
1/14IADivision2007-9-7grep调研文档grep调研文档Version1.002/14IADivision2007-9-7grep调研文档RevisionHistoryVersionDateOriginatorDescription1.002007-09-28石飞3/14IADivision2007-9-7grep调研文档目录1引言............................................................................................................................42GREP详解....................................................................................................................42.1grep一般格式.........................................................................................................................42.2常用的grep选项....................................................................................................................42.3Grep的一些例子.......................................................................................................................52.4正则表达式................................................................................................................................62.5类名.........................................................................................................................................112.6使用通配符*的匹配模式............................................................................................................112.7系统grep.................................................................................................................................122.8使用ps命令............................................................................................................................132.9egrep......................................................................................................................................134/14IADivision2007-9-7grep调研文档1引言Grep(globalsearchregularexpression(RE)andprintouttheline,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Grep家族包括Grep、eGrep和fGrep。eGrep和fGrep的命令只跟Grep有很小不同。eGrep是Grep的扩展,支持更多的re元字符,fGrep就是fixedGrep或fastGrep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的Grep。它功能更强,可以通过-G、-E、-F命令行选项来使用eGrep和fGrep的功能。Grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。Grep可用于shell脚本,因为Grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。2Grep详解2.1grep一般格式CODE:grep[选项]基本正则表达式[文件]这里基本正则表达式可为字符串。单引号双引号在grep命令中输入字符串参数时,最好将其用双引号括起来。在调用模式匹配时,应使用单引号。例如:“mystring”。这样做有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。2.2常用的grep选项QUOTE:-c只输出匹配行的计数。-i不区分大小写(只适用于单字符)。-h查询多文件时不显示文件名。-l查询多文件时只输出包含匹配字符的文件名。-n显示匹配行及行号。-s不显示不存在或无匹配文本的错误信息。-v显示不包含匹配文本的所有行。5/14IADivision2007-9-7grep调研文档开始讨论之前,先生成一个文件,插入一段文本,并在每列后加入Tab键,grep命令示例中绝大多数将以此为例,其命名为data..f。生成一个文件,data.f的记录结构如下:QUOTE:第1列:城市位置编号。第2列:月份。第3列:存储代码及出库年份。第4列:产品代号。第5列:产品统一标价。第6列:标识号。第7列:合格数量。文件内容如下:CODE:$catdata.f48Dec3BC1977LPSX68.00LVX2A138483Sept5AP1996USP65.00LVX2C18947Oct3ZL1998LPSX43.00KVM9D512219dec2CC1999CAD23.00PLV2C68484nov7PL1996CAD49.00PLV2C234483may5PA1998USP37.00KVM9D644216sept3ZL1998USP86.00KVM9E2342.3Grep的一些例子1、查询多个文件在所有文件中查询单词“sortit”CODE:$grepsortit*2、行匹配1)显示包含“48”字符串的文本:CODE:$grep48data.f2)输出匹配行的总数CODE:$grep-c48data.f46/14IADivision2007-9-7grep调研文档grep返回数字4,表示:包含字符串“48”的有4行。3)行数显示满足匹配模式的所有行行数:CODE:$grep-n48data.f行数在输出第一列,后跟包含48的每一匹配行。4)显示非匹配行显示所有不包含48的各行CODE:$grep-v48data.f5)精确匹配可能大家已注意到,在上一例中,抽取字符串“48”,返回结果包含诸如484和483等包含“48”的其他字符串,实际上应精确抽取只包含48的各行。使用grep抽取精确匹配的一种更有效方式是在抽取字符串后加\。假定现在精确抽取48,方法如下:CODE:$grep48\data.fQUOTE:另一种方法我试过,好像不行:注意在每个匹配模式中抽取字符串后有一个Tab键,所以应操作如下:Tab表示点击tab键。$grep48tabdata.f6)大小写敏感缺省情况下,grep是大小写敏感的,如要查询大小写不敏感字符串,必须使用-i开关。在data.f文件中有月份字符Sept,既有大写也有小写,要取得此字符串大小写不敏感查询,方法如下:CODE:$grep-i48data.f2.4正则表达式使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止grep中使用的专有模式与一些shell命令的特殊7/14IADivision2007-9-7grep调研文档方式相混淆。1、模式范围抽取代码为484和483的城市位置,可以使用[]来指定字符串范围。CODE:$grep48[34]data.f483Sept5AP1996USP65.00LVX2C189484nov7PL1996CAD49.00PLV2C234483may5PA1998USP37.00KVM9D6442、不匹配行首使行首不是4或8,可以在方括号中使用^记号。CODE:$grep^[^48]data.f219dec2CC1999CAD23.00PLV2C68216sept3ZL1998USP86.00KVM9E234如果是字符串48CODE:$grep-v^[^48]data.f3、设置大小写使用-i开关可以屏蔽月份Sept的大小写敏感CODE:[sam@chenwysam]$grep-iseptdata.f483Sept5AP1996USP65.00LVX2C189216sept3ZL1998USP86.00KVM9E234也可以用另一种方式[]模式抽取各行包含Sept和sept的所有信息。CODE:[sam@chenwysam]$grep'[sS]ept'data.f如果要抽取包含Sept的所有月份,不管其大小写,并且此行包含字符串483,可以使用管道命令,即符号“|”左边命令的输出作为“|”右边命令的输入。举例如下:CODE:[sam@chenwysam]$grep'[sS]ept'data.f|grep48483Sept5AP1996USP65.00LVX2C189不必将文件名放在第二个grep命令中,因为其输入信息来自于第一个grep命令的输出8/14IADivision2007-9-7grep调研文档4、匹配任意字符如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:CODE:[sam@chenwysam]$grep'K...D'data.f47Oct3ZL1998LPSX43.00KVM9D512483may5PA1998USP37.00KVM9D644将上述代码做轻微改变,头两个是大写字母,中间两个任意,并以C结尾:CODE:[sam@chenwysam]$grep'[A-Z]..C'data.f483Sept5AP1996USP65.00LVX2C189219dec2CC1999CAD23.00PLV2C68484nov7PL1996CAD49.00PLV2C2345、日期查询一个常用的查询模式是日期查询。先查询所有以5开始以1996或1998结尾的所有记录。使用模式5..199[6,8]。这意味着第一个字符为5,后跟两个点,接着是199,剩余两个数字是6或8。CODE:[sam@chenwysam]$grep'5..199[6,8]'data.f483Sept5AP1996USP65.00LVX2C189483may5PA1998USP37.00KVM9D6446、范围组合必须学会使用[]抽取信息。假定要取得城市代码,第一个字符为0-9,第二个字符在0到5之间,第三个字符在0到6
本文标题:grep+awk+sed命令调研文档
链接地址:https://www.777doc.com/doc-6431029 .html