Fork me on GitHub

shell脚本4-grep的使用

grep和egrep

这两个命令的作用都是一个过滤器的作用,他们的本质上都是来进行一个文本的过滤,我们一般使用比较多的是grep命令。

grep 的语法格式

  • 第一种格式:grep [option][pattern][file1,file2,...]
  • 第二种格式: command | grep [option][pattren]

第一种是在文件里面进行一个操作,第二种是在某个执行某个命令之后去再次对执行这个命令的结果去进行一个grep操作。

grep 参数

选项 含义
-v 不显示匹配行信息
-i 搜索时忽略大小写(是否需要精确匹配)
-n 显示行号
-r 递归搜索
-E 支持拓展的正则表达式
-F 不按正则表达式,按照字符串字面意思匹配

上面这些选项都是一些比较常用的,使用的非常多 = =.

例如,我们有一个去一个文件里面找js字符相关的东西。

新建一个文件名字叫做file

里面放上这样的一些内容:

1
2
3
4
I love js
I LOVE JS
JSjs
looove

grep js file
假设他的输出结果是:

1
2
I love js
JSjs

grep -v js file,这个命令会过滤掉匹配的结果:

1
2
I LOVE JS
looove

由于这种情况下是会考虑到大小写的,所以我们需要使用i 这个参数来将大小写进行一次忽略操作:
grep -vi js file
这样输出的结果便会彻底没有js相关的字符串

1
looove

grep -ni js file

这个时候便会输出找到的字符串的行号:

1
2
3
1:I love js
2:I LOVE JS
3:JSjs

grep -n man /etc/man_db.conf

这样他会在这个文件中找到所有有man的行的行号。

grep "js" file

输出结果为(这里就只会去匹配js这个字符串):

1
2
I love js
JSjs

这里我们可以是用拓展的正则表达式来去进行更多的匹配

grep "js.*" file 这样就可以去匹配更多的字符表达式。

grep "js|JS" file 这样也是一个标准的拓展正则表达式符号。

如果要去支持上面这种有拓展正则表达式符号的正则表达式,我们需要在grep的命令里面加入-E

这样我们可以找到既包含小写js也可以找到包含大写JS的字符串。

grep "js.*" file 在这种情况下我们是按照正则表达式的方式去匹配,可是如果我们的文本里面的确有js.* 这个字符串,我们需要去匹配到这个字符串,我们就需要使用grep "js.*" -F file

grep -r love 这个会在当前目录下里面的所有文件里面去找有love这个字符串的文件,并且输出相应的文件名,以及对应匹配到的字符串的行号。

egrep的作用相当于和grep -E的作用是一样的(默认支持了拓展的正则表达式功能而已)。

-------------本文结束感谢您的阅读-------------