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文件)