Grep命令的使用
#GREP介绍
注意:在输入要搜索的字符串时最好使用双引号,而在模式匹配使用正则表达式时,建议使用单引号。
–color选项是个非常好的选项,可以让你清楚的明白匹配了那些字符。最好在自己的.bashrc或者.bash_profile文件中加入。
alias grep=grep --color=auto 每次grep搜索之后,自动高亮匹配效果了。
#GREP命令的参数
语法:
grep -[acinv] 'search' filename
其中
-a 表示以文本方式搜索
-c 表示计算出匹配条件的行的次数(统计符合筛选条件的文本行的数量)
-i 表示忽略大小写
-n 表示输出行号
-v 表示反向选择,剔除不符合条件的记录
-r 表示递归的查找文件
-l 查询多文件时只输出包含匹配字符的文件名。
-L 列出不匹配的文件名
-w 只匹配单词,而不匹配字符串的的一部分
-s 不显示不存在或无匹配文本的错误信息。
-E 使用扩展正则表达式
-o 表示“only-matching”,即“仅匹配”之意(获取匹配到的字符串)
--exclude-dir=DIR
Exclude directories matching the pattern DIR from recursive searches.
#查找项目中含有require_once的文件,使用递归查看文件夹方式
grep -rl 'require_once' *
这里,只是希望查找到包含该字符串的文件,列出结果的文件名。这里的递归是不必要的,因为通配符*表示了当前文件夹下的所有文件。
#使用正则表达式
正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
判断当user不存在的时候,统计的数据
grep 'user":"[0-9]\{1,20\}' stats.log.20151107 | grep 'topic_index' | wc -l
grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
#使用的若干个例子
在目录中查找包含指定字符串的文件。
sudo grep -r 'search text' /home/* -r表示递归的查找文件
剔除==0的记录
grep -v '==0' /home/summary.log
普通查找
grep -n 'abc' me.txt
利用[]搜索集合字符,[]表示其中的某一个字符(正则表达式的一部分,但是不需要使用反斜杠转义)
grep -n 't[ae]st' me.txt
行首字符^和行尾字符$, 符号^表示行的开头,$表示行的结尾,’^$’表示空。
grep -n '^the' me.txt
搜索以小写字母开头的行
grep -n '^[a-z]' me.txt
搜索开头不是英文字母的行
grep -n '[^a-zA-Z]' me.txt
搜索以 . 结尾的行
grep -n '\.$' me.txt
搜索非空的行
grep -nv '^$' me.txt
正则表达式重复字符*和任一字符 .
grep -n 'g..d' me.txt
限定连续重复字符的范围时使用(正则表达式大括号{}需要使用反斜杠转义)
grep -n 'o\{2,3\}' me.txt
扩展正则表达式
grep -v '^$' me.txt | grep -v '^#'
获取匹配到的字符串([]内部的字符是单纯的字符)
grep -o '\[.*\]' access.log
通过Kids过滤过滤出来的数据
grep 'Kids-' stats.log.20151108 | grep topic_info | wc -l
查询以5开头以两个大写字母结尾的行
grep '5[[:upper:]][[:upper:]]' data.doc
使用扩展正则表示式,没有匹配到ip地址
grep -E '(((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))' stats.log.20151111
grep -oE '(((25[0-5]|2[0-4][0-9]|((1\d{2})|([1-9]?[0-9])))\.){3}(25[0-5]|2[0-4][0-9]|((1\d{2})|([1-9]?[0-9]))))' stats.log.20151111
[-E 不支持\d这个元字符]
#RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配单词的开始
\> 到匹配单词的结尾
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0
#将GREP结果转到LESS
如果有很多输出时,您可以通过管道将其转到’less’上阅读。
#使用类名
可以使用国际模式匹配的类名:
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]