linux命令-grep

grep是工作用到最多的命令,绝对是linux下的利器,这里总结一下

用法:grep -[acinv] '搜索内容串' filename

-a 以文本文件方式搜索 

-c 计算找到的符合行的次数 

-i 忽略大小写 

-n 输出行号 

-v 反向选择,即找 没有‘搜索字符串’的行 

搜索串可以是正则表达式。

1、输出行号,带‘name’和不带'name'的行

➜  my-web  grep -n 'name' test.log
➜  my-web  grep -nv 'name' test.log
 

2、利用[]搜索集合字符,[]表示其中的某一个字符

➜  my-web  grep '[mn]i' test.log 
name=jack,nike
#name=mike
 

3、可以用^符号做[]内的前缀,表示除[]内的字符之外的字符

➜  my-web  grep '[^n]' test.log                                                 #奇怪,把所有行输出了                      
tbbbbbbb
name=1234
name=jack,nike
#name=mike
age=24
 下面2种方式都ok!!
➜  my-web  grep -v '[n]' test.log
tbbbbbbb
age=24
 
➜  my-web  grep '[^n]i' test.log 
#name=mike
 

4、 [] 内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z]则是大写字母

➜  my-web  grep '[0-9]' test.log
name=1234
age=24
➜  my-web  grep '[a-z]' test.log
 

5、行首与行尾字符 ^ $. ^ 表示行的开头,$表示行的结尾( 不是字符,是位置)那么‘^$' 就表示空行,因为只有 行首和行尾。  这里^与[]里面使用的^意义不同。它表示^后面的串是在行的开头。

➜  my-web  grep '^name' test.log
name=1234
name=jack,nike
➜  my-web  grep '^[a-z]' test.log
tbbbbbbb
name=1234
name=jack,nike
age=24 
#搜索开头不是小写英文字母的行
➜  my-web  grep '^[^a-z]' test.log
#name=mike
 
--------------------------------------
 

6、$表示它前面的串是在行的结尾,比如 '\.' 表示 . 在一行的结尾,.是正则表达式的特殊符号,所以要用\转义

➜  my-web  grep 'e$' test.log 
name=jack,nike
#name=mike
➜  my-web  grep -n '^$' test.log 
5:
➜  my-web  grep -nv '^$' test.log
1:tbbbbbbb
2:name=1234
3:name=jack,nike
4:#name=mike
6:age=24
7:

7、正则表达式中,*表示有0个或多个某个字符,.代表一个任意字符

➜  my-web  grep 'm..e' test.log 
#name=mike
➜  my-web  grep 'tbbb*' test.log 
tbbbbbbb
 

8、限定连续重复字符的范围 { } ,范围是数字用,隔开 2,5 表示2~5个,  2表示2个,2, 表示2到更多个  注意,由于

{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用\转义一下

➜  my-web  grep 'tb\{5,\}' test.log
tbbbbbbb
 

9、egrep扩展正则表达式,其实 egrep 是 grep -E 的别名而已。因此grep -E 支持扩展正则。这里| 表示或的关系,+于 . * 作用类似,表示一个或多个重复字符。  ?于 . * 作用类似,表示0个或一个字符。()将部分内容合成一个单元组。

➜  my-web  egrep '^t|^#' test.log 
tbbbbbbb
#name=mike

10、fgrep、egrep、grep区别:

gerp Search a Pattern from current directory. 

egrep (grep -E in linux) is extended grep where additional regular expression metacharacters have been added like +, ?, | and ().

fgrep (grep -F in linux) is fixed or fast grep and behaves as grep but does not recognise any regular expression metacharacters as being special.

11、grep 搜索jar包里包含名称的文件,并列出jar包,用于排查类冲突

[xxx@yyyy lib]$ grep -r RequestParser .
Binary file ./aaa-4.0.13-SNAPSHOT.jar matches