Linux Shell脚本系列-grep用法总结
相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。
本文主要讨论以下内容:
• 匹配grep的一般模式。
• 只匹配字母或数字,或两者混用。
• 匹配字符串范围。
1. grep
grep [选项]基本正则表达式[文件]
2.双引号的使用
在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。这样做有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,例如:“jetplane”,如果不用双引号将其括起来,那么单词plane将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。
3.grep选项
常用的grep选项有:
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
4. grep举例
4.1 多文件查找
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
$ 4
grep返回数字4,意义是有4行包含字符串“48”
显示满足匹配模式的所有行行数
1:48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2:483 Sept 5AP1996 USP 65.00 LVX2C 189
5:484 nov 7PL1996 CAD 49.00 PLV2C 234
6:483 may 5PA1998 USP 37.00 KVM9D 644
显示不匹配的行
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
大小写敏感
483 Sept 5AP1996 USP 65.00 LVX2C 189
216 sept 3ZL1998 USP 86.00 KVM9E 234
5.正则表达式
5.1 模式匹配
假定要抽取代码为484和483的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这里用48开始,以3或4结尾,这样抽出484或483。
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644
不匹配行首 如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始。
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
匹配任意字符
如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
483 may 5PA1998 USP 37.00 KVM9D 644
日期查询
一个常用的查询模式是日期查询。先查询所有以5开始以1996或1998结尾的所有记录。使用模式5..199[6,8]。这意味着第一个字符为5,后跟两个点,接着是199,剩余两个数字是6或8。
483 Sept 5AP1996 USP 65.00 LVX2C 189
483 may 5PA1998 USP 37.00 KVM9D 644
模式出现机率
抽取包含数字4至少重复出现两次的所有行,方法如下:
483 may 5PA1998 USP 37.00 KVM9D 644
使用grep匹配“与”或者“或”模式
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
使用grep匹配“与”或者“或”模式
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
6 类名
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab键
[[:alpha:]] [a-zA-Z]
7 总结
希望大家已经理解了grep的灵活性,它是一个很强大而流行的工具,像其他许多UNIX工具一样,已经被使用在DOS中。如果要通过文件快速查找字符串或模式, grep是一个很好的选择。简单地说, grep是shell编程中很重要的工具。