加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Linux Shell脚本系列-grep用法概括

发布时间:2021-11-30 12:45:09 所属栏目:教程 来源:互联网
导读:相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。 本文主要讨论以下内容: grep(参数)选项。 匹配grep的一般
相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。
 
本文主要讨论以下内容:
 
• grep(参数)选项。
• 匹配grep的一般模式。
• 只匹配字母或数字,或两者混用。
• 匹配字符串范围。
1. grep
 
grep 一般格式为:
grep [选项]基本正则表达式[文件]
2.双引号的使用
 
在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。这样做有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,例如:“jetplane”,如果不用双引号将其括起来,那么单词plane将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。
 
3.grep选项
常用的grep选项有:
 
-c          只输出匹配行的计数。
-i          不区分大小写(只适用于单字符)。
-h          查询多文件时不显示文件名。
-l          查询多文件时只输出包含匹配字符的文件名。
-n          显示匹配行及行号。
-s          不显示不存在或无匹配文本的错误信息。
-v          显示不包含匹配文本的所有行。
4. grep举例
 
 4.1 多文件查找
 
$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
$ grep -c "48"data.f
$ 4
grep返回数字4,意义是有4行包含字符串“48”
 显示满足匹配模式的所有行行数
 
[root@localhost /]# grep -n "48" data.f
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
显示不匹配的行
 
[root@localhost /]# grep -v "48" data.f
 47      Oct     3ZL1998         LPSX    43.00   KVM9D   512
 219     dec     2CC1999         CAD     23.00   PLV2C   68
 216     sept    3ZL1998         USP     86.00   KVM9E   234
 大小写敏感
 
[root@localhost /]# grep -i "sept" data.f
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。
 
[root@localhost /]# grep "48[34]" data.f
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,可以在方括号中使用^记号,表明查询在行首开始。
 
[root@localhost /]# grep '^[^48]' data.f
219     dec     2CC1999         CAD     23.00   PLV2C   68
216     sept    3ZL1998         USP     86.00   KVM9E   234
匹配任意字符
 
如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:
 
[root@localhost /]# grep 'K...D' data.f
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。
 
[root@localhost /]# grep '5..199[68]' data.f
483     Sept    5AP1996         USP     65.00   LVX2C   189
483     may     5PA1998         USP     37.00   KVM9D   644
模式出现机率
 
抽取包含数字4至少重复出现两次的所有行,方法如下:
 
[root@localhost /]# grep '4{2}' data.f
483     may     5PA1998         USP     37.00   KVM9D   644
使用grep匹配“与”或者“或”模式
 
[root@localhost /]# grep -E '216|219' data.f
219     dec     2CC1999         CAD     23.00   PLV2C   68
216     sept    3ZL1998         USP     86.00   KVM9E   234
使用grep匹配“与”或者“或”模式
 
[root@localhost /]# grep -E '216|219' data.f
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键
[[:digit:]]  [0-9]
[[:alpha:]]  [a-zA-Z]
7 总结
 
希望大家已经理解了grep的灵活性,它是一个很强大而流行的工具,像其他许多UNIX工具一样,已经被使用在DOS中。如果要通过文件快速查找字符串或模式, grep是一个很好的选择。简单地说, grep是shell编程中很重要的工具。
 
 

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读