之前我们已经介绍了linux awk
工具,和linux jq
工具,这次我们来看看linux grep
工具。
什么是grep
grep
最早是使用在unix
操作系统上的命令行,后被移植到了Linux
下(如果你对这段历史感兴趣,建立查询维基百科会更好点。),在Linux
下,我们一般将grep
称之为GUN grep
(这里可以使用 grep -V
来查看),而grep
是一组命令的统称,grep
下包含了egrep, fgrep, rgrep
等,是较为著名的搜索行处理工具。
查看Linux grep
版本
如何使用grep
grep
命令格式为
grep [OPTION...] PATTERNS [FILE...]
grep
可以直接搜索文件内容,亦可以配合管道进行搜索(这种更为常用),所以必备的参数是【匹配项】,我们也称之为模式,而选项和文件,则不是必备的,例如,一个最简答搜索可以是这样的: grep root
,我们列举一个实际的例子:
cat /etc/passwd | grep root
我们来介绍下常用的选项和参数
匹配模式
-i
: 忽略大小写
-w
: 按单词进行匹配
-v
: 匹配反转
-x
: 强制匹配整列
匹配输出选项
-c
: 输出匹配成功的行数
-l
: 输出匹配成功的文件名
-L
: 输出匹配失败的文件名
-m
: 该选项会跟一个数值n
,匹配成功n
次后则不再进行匹配
-q
: 匹配成功与否都不输出到标准输出,而是以返回值的呈现,匹配成功则为0,失败则为1
-s
: 匹配会输出到标准输出,同时也会以返回值的方式呈现,匹配成功为0,失败为1
打印上下文
-C
: 该选项会跟一个数值n
,匹配成功后,则会打印其前后n
条数据
-A
: 该选项会跟一个数值n
,匹配成功后,则会打印其后面n
条数据
-B
: 该选项会跟一个数值n
,匹配成功后,则会打印其前面n
条数据
grep 案例
匹配文件内容是否存在
相比各位多多少少都写过shell
,如果让大家写一个判断文件中是否出现了某个单词,大家会这么写呢?
假如有如下文件
我们需要判断文件中是否出现pdudo
,让其作为shell
来判断,按照我以前的一般思路来写写
grep pdudo test1 | wc -l
其中 grep pdudo test1
是搜索test1
文件中匹配pdudo
的行
wc -l
: 获取匹配的行数
然后我们根据其值,若为0
则匹配失败,否则为匹配成功。
现在我们仅需要这样写即可
grep -q pdudo test1
根据其返回值,可以来判断匹配内容是否存在,若为0
,则匹配成功,若为1
则匹配失败。
我们来试试
这样写,好了很多,不是么?
忽略大小写
若我们想忽略大小写,我们可以使用-i
选项即可(注意grep
默认匹配大小写的),例如 我们想搜索 pdudo
不论大小写的,都可以。
假设有如下文件,我们想搜索一下pdudo
,不论大小写
我们可以使用命令grep -i pdudo
按照单词搜索
若有如下文件,我们仅想搜索I_love_you
这个单词,而不是yan_I_love_you
,则我们可以使用-w
处理该问题: grep -w 'I_love_you' test1
我们可以看到,默认搜索会匹配2行,而使用-w
之后,仅匹配该单词所在的行,注意,这里使用中文不得行哈,使用-w
搜索不得行的哈。
打印匹配行上下文
我们可以使用-C n
来获取匹配成功后,前后n
行数据。
例如有如下文件
我们想获取pdudo
前后2行的数据,使用grep
可以这样写: grep -C 2 pdudo test1
剩下的,就不一一介绍了,大家有机会可以自行实验一下。
总结
我们这次学习了grep
基本命令,怎么样,感觉grep
很强大吧,那当然了,grep
可是称为linux
三剑客之一。快来动动你小手指,来试试吧。