日期:2014-05-16  浏览次数:20782 次

Linux下文本搜索工具grep命令使用入门

grep命令入门

如果想通过使用grep命令来实现理想化的文本搜索,对正则表达式的了解是比不可少的。文献1对正则表达式语法做了一个简单的介绍,文献2提供了一个简单的入门。码农也可以自己google一下其他的参考资料。下面就grep命令的使用做个入门级的介绍。

1.1 grep命令的变种

linux下除了grep命令可以完成文本搜索外,还存在egrep,fgrep,rgrep三个命令。这三个命令都是由grep加上一些控制参数演变而来,如egrep=grep -E, fgrep=grep -F, rgrep=grep -r(后面会介绍这些参数),所以以码农只需关注于grep命令即可。

1.2 grep命令的使用格式

(1)grep [OPTIONS] PATTERN [FILE...]
(2)grep [OPTIONS] [-e PATTERN | -f PATTERN] [FILE...]

示例:
grep hello hello.c //查找hello.c文件中含有hello的代码行
grep -e hello -e world hello.c //查找文件中含有hello或world的代码行
grep -f hello hello.c //从文件hello中读取搜索关键词,然后在文件hello.c中查找此关键词

1.3 grep命令的参数选择

匹配选择:

-E, --extended-regexpPATTERN作为扩展的正则表达式解释,如grep -E '^\s' hello.c // 搜索hello.c文件中以空白字符开始的行,相当于egrep '^\s' hello.c
-F, --fixed-strings PATTERN解释为固定的字符串,不作正则表达式分析。grep -F 'main()' hello.c // 等同于fgrep 'main()' hello.c

匹配控制:

-e PATTERN, --regexp=PATTERN 指定pattern为搜索正则表达式,可以通过使用这个选项来指定多个搜索模式,或者用来制定以横线-开始的搜索模式,如grep -e hello -e world hello.c //搜索含有hello或者world的代码行
-f file, --file=FILE 指定从文件FILE中读取搜索模式,一行一个搜索模式
-i, --ignore-case模式匹配时忽略大小写
-v, --invert-math 反向匹配,选择那些不含有匹配模式的行,如grep -e -v hello hello.c //输出那些不含有hello的代码行
-x, --line-regexp 将一整行文本与搜索模式PATTERN进行匹配,输出匹配行,如grep -E '^\s*$' -x hello.c //查找空白行

输出控制:

-c, --count代替输出匹配的文本行,还是输出匹配的次数
-m NUM, --max-count=NUM 在一个文件中匹配次数超过NUM后,就停止搜索匹配
-o, --only-matching 代替输出匹配的文本行,而是仅仅输出匹配的部分文本
-n, --line-number 在输出的匹配文本行前面添加行号,这个行号指的原文件中的文本所在行号