Linux行处理工具: grep (1)

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

之前我们已经介绍了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三剑客之一。快来动动你小手指,来试试吧。

posted @ 2022-08-06 22:50  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源