Grep应该是所有linux下开发人员天天都会使用的一个搜索工具,以其简单易用、功能强大赢大广大人们的喜爱,熟练使用Grep可以大大提高工具效率,下面总结一下本人在工作在使用上的一些技巧。
一、基本用法
grep [options] PATTERN [FILE...]
常见的options有几下几种:
-a 以文本文件方式搜索
-c 显示满足PATTERN 的个数
-i 忽略大小写
-n 显示匹配的行号
-v 反向选择,即查找不满足PATTERN 的行
-b 显示搜索字符在匹配行出现的首位置
-R/r 递归搜索指定目录下所有文件
-H 打印所有匹配PATTERN 的文件名,目录搜索时非常有用
-E 用于使用多个匹配关键词进行搜索
-w 搜索整个词,而不是词中的部分字串
下面举几个简单例子:
1. 通过-v删除满足PATTERN的文本行
grep -v ‘年代’ test.txt > test.txt 删除test.txt文件中包含’年代’的文本行
2. 匹配包含多个搜索关键词的文本行
grep -En ‘发生|现象’ a.txt 匹配同时包含“发生”和“理象”的文本行,并显示行号
3. 多个options同时使用
grep -i -w -r -E ‘error|failed|failure’ /var/log |less #查看日志的错误信息
4. 代替wc显示文件行数
grep -c ” test.txt
5. 搜索以“我“开头的文本行
grep ‘^我’ test.txt
6. 搜索以“我“结束的文本行
grep ‘我$’ test.txt
7. 搜索非空行
grep -vn ‘^$’ test.txt
二、高级用法(正则表达式)
? 最多匹配一次
* 匹配零次或者任意多次
+ 匹配一次以上
{n} 匹配n次
{n,} 最少匹配n次
{,m} 最多匹配m次
{n,m} 匹配n到m次
举几个例子:
$ grep ‘[a-z]\{10\}’ test.txt
显示所有包含每个字符串至少有10个连续小写字符的字符串的行。
$ grep \’[^A-FH-Z]rep\’ test.txt
匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
grep -r ‘hadoop’ `ls | grep -vE ‘bin|boot|dev|initrd|lib’`
全盘搜索(排除bin、boot、dev、initrd、lib)包含hadoop字符串的文件