Grep命令的使用

2015-12-01  本文已影响762人  neojos

#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]

上一篇 下一篇

猜你喜欢

热点阅读