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