shell --grep家族

在本章中我们将讨论:
• grep(参数)选项。
•  匹配g r e p的一般模式。
•  只匹配字母或数字,或两者混用。

•  匹配字符串范围

8.1 grep
g r e p一般格式为:
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。8.1.1  双引号引用
在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如: “m y s t r i n g” 。这样做
有两个原因,一是以防被误解为 s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:
“jet plane ” ,如果不用双引号将其括起来,那么单词 p l a n e将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。
在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将
没有返回结果。
在调用模式匹配时,应使用单引号

8.1.2 grep选项
常用的g r e p选项有:
-c  只输出匹配行的计数。
-i  不区分大小写(只适用于单字符) 。
-h  查询多文件时不显示文件名。
-l  查询多文件时只输出包含匹配字符的文件名。
-n  显示匹配行及行号。
-s  不显示不存在或无匹配文本的错误信息。
-v  显示不包含匹配文本的所有行。

8.1.3  查询多个文件

8.1.4  行匹配
$ grep -c "48"data.f
$ 4
g r e p返回数字4,意义是有 4行包含字符串“4 8”
如果要在当前目录下所有 . d o c文件中查找字符串“ s o r t” ,方法如下:
$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *
现在讲述在文本文件中 g r e p选项的用法

8.1.5  行数
显示满足匹配模式的所有行行数:

$ grep -n "48" data.txt

8.1.6  显示非匹配行
显示所有不包含4 8的各行:

$ grep -v "48" data.txt


8.1.7  精确匹配
可能大家已注意到,在上一例中,抽取字符串“ 4 8” ,返回结果包含诸如 4 8 4和4 8 3等包含
“4 8”的其他字符串,实际上应精确抽取只包含 4 8的各行。注意在每个匹配模式中抽取字符串
后有一个< Ta b >键,所以应操作如下:

$grep "48<tab>" data.txt
< Ta b >表示点击t a b键。
使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加 \ > 。假定现在精确抽取 4 8,
方法如下:

$ grep '48\>' data.txt


8.1.8  大小写敏感
缺省情况下, g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用 - i开关。在
d a t a . f 文件中有月份字符 S e p t,既有大写也有小写,要取得此字符串大小写不敏感查询,方法
如下:
8.2 grep和正则表达式

$ grep -i  "sept" data.txt

8.2.1  模式范围
假定要抽取代码为 4 8 4和4 8 3的城市位置,上一章中讲到可以使用 [ ] 来指定字符串范围,这
里用4 8开始,以3或4结尾,这样抽出4 8 4或4 8 3。

$ grep '48[34]' data.txt

8.2.2  不匹配行首
如果要抽出记录,使其行首不是 4 8,可以在方括号中使用 ^记号,表明查询在行首开始

$ grep '^[^48]' data.txt

8.2.3  设置大小写

$grep '[Ss]ept' data.txt

8.2.4  匹配任意字符
如果抽取以 L开头,以 D结尾的所有代码,可使用下述方法,因为已知代码长度为 5个字
符:

$ grep 'K...D' data.txt

$ grep '[A-Z][A-Z]..C' data.txt

8.2.5  日期查询
一个常用的查询模式是日期查询。先查询所有以 5开始以1 9 9 6或1 9 9 8结尾的所有记录。使
用模式 5 . . 1 9 9 [ 6 , 8 ]。这意味着第一个字符为 5,后跟两个点,接着是 1 9 9,剩余两个数字是 6或
8。

$  grep "5...199[6,8]" data.txt

查询包含 1 9 9 8的所有记录的另外一种方法是使用表达式 [ 0 - 9 ] \ { 3 \ } [ 8 ] ,含义是任意数字重
复3次,后跟数字8,虽然这个方法不像上一个方法那么精确,但也有一定作用。

$ grep "[0-9]\{3\}[8]" data.txt

8.2.7  模式出现机率
抽取包含数字4至少重复出现两次的所有行,方法如下:

$ grep "4\{2,\}" data.txt

上述语法指明数字 4至少重复出现两次。
同样,抽取记录使之包含数字 9 9 9(三个9) ,方法如下:

$ grep '9\{3,\}' data.txt
如果要查询重复出现次数一定的所有行,语法如下,数字 9重复出现两次:

$ grep "9\{2\}"  data.txt

8.2.9  空行
结合使用^和$可查询空行。使用 - n 参数显示实际行数:

$ grep "^$" data.txt

8.2.10  匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含“.”
的所有行,脚本如下:

$ grep "\." data.txt
或者是一个双引号:

$ grep "\"" data.txt
以同样的方式,如要查询文件名 c o n f t r o l l . c o n f(这是一个配置文件) ,脚本如下

$ grep "conftroll\.conf" data.txt

8.4.1  目录
如果要查询目录列表中的目录,方法如下:

$ ls -l |grep "^d"
如果在一个目录中查询不包含目录的所有文件,方法如下:

$ ls -l |grep "^[^d]"
要查询其他用户和其他用户组成员有可执行权限的目录集合,方法如下:

$ ls -l |grep "^d.....x..x"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值