首页 > 代码库 > Linux下文本搜索-GREP篇

Linux下文本搜索-GREP篇

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字符串的文件

Linux下文本搜索-GREP篇