Grep的使用经验实例解释



Grep的使用经验实例解释。grep(global regular expression print)是用来查找文件内容的命令 (find是用来查找文件的), 功能很强大,是我用的最多的命令之一,用好grep,一是要用好参数,二是要用好正则表达式。列一些我平时使用到的一下经验(正则表达式就不介绍了)。

常用参数介绍:

-i : 不区分大小写,默认是区分的. 【grep –I ‘donner’ filename】 = 【grep –E ‘(D|d)onner’ filename】

-w : 匹配整个单词. 【grep –w “donner” filename】=【grep “^donner$” filename】

-r : 当前目录和子目录, 如果需要在某个目录(而不是文件)里查找,不要忘了 –r. 【grep “donner” f1 f2 f3 f4 f5】=【grep –r “donner” foldername】

-v : 反转匹配, 就是打印除了匹配行之外的行. 【grep –E “a|b|d|e” filename】=【grep –v “c” filename】

-c : 只打印匹配行的数量,不打印匹配行

-n : 不仅打印匹配行,还打印出行号

-o : 只打印匹配的字串,而不是整行

-q : –silent, 不打印匹配行,但返回值($?)是不一样的. 如果脚本里不对grep的打印做处理,会有很多没有意义的输出.【grep “donner” filename > /dev/null】=【grep -q“donner”filename】

-E : egrep,支持拓展正则表达式. 这里有个需要注意的地方就是“*”和“.*”

-F : fgrep, 对于纯字符串查找,-F会更快些

-H : –with-filename, 打印文件名和该文件匹配的内容. 如果在多个文件中查找到,默认会表明路径。但是如果只有一个文件中查找到,默认只打印匹配内容. 只在以前我都在这出过错,grep后面接cut按字段来取内容,遇上只在一个文件中查找到匹配这中情况,取出来的字段就错了.

匹配回车

1) grep ‘$\r\r’ filename (c语言风格转义)


2) grep ‘$^v^m’

单引号和双引号

1) grep donner filename (没有引号,由shell来解释,而不是有grep来解释)

2) grep ‘$donner’ filename (单引号,$的意思是行尾,明显找不到行尾还有字母的文件)

3) grep “$donner” filename (双引号,会按变量donner的值来查找,如果没有设定,则 grep “”filename, 匹配模式为空则匹配所有行. 顺便说下,按${donner}来引用变量值真的是个很好的习惯)

记得转义

grep “[0-9].[0-9]” filename (匹配1.9 119 1a9)

grep “[0-9]\.[0-9]” filename (匹配 1.9)

grep “a{2}” filename

grep “a\{2\}”filename

利用grep来恢复被删除文件内容

rm并不真正物理上删除文件,只是回收文件的inode,其实文件内容还存在硬盘上

grep –a –b 20 –a 20“donner“ /dev/sda1 > result.txt (-a 等价于 –binary-file=text,把二进制文件当文本文件来处理)

grep是可以识别*号的,这个用起来也很方便

grep “donner” ./folder1/*/*.xml (查找folder1文件夹下面所有文件夹里面的xml文件)