1.9 grep在文件中查找字符串(Global regular expression print)
*非常有用的文件查找命令!!*
- 语法
grep 模式 文件名列表//注意加后缀名
- 举例
- grep O_RDWR *.h /// O_RDWR 读、写打开
- ps -ef | grep liang // ps –ef表示显示所有进程,将输出结果给gre看是否有这个词‘liang ’的进程在运行
- who | grep liang
- ls -l / | grep '^d' | wc –l
- grep '[0-9]*' chapter1
- grep '[0-9][0-9]*' chapter1
grep简介:
grep(global search regular expression)是一个强大的文本搜索工具。grep使用正则表达式搜索文本,并把匹配的行打印出来。UNIX的grep家族包括grep、egrep、fgrep
1.grep 使用BRE书写匹配模式
2.egrep 使用ERE书写匹配模式,等效于grep -E。
3.fgrep 不使用任何正则表达式书写匹配模式(以固定字符串对待),执行快速搜索等效于grep -F
grep 命令格式
grep [options] PATTERN [FILE...]
其中PATTERN是用正则表达式书写的模式。
FILE是要查找的文件,可以是用空格间隔的多个文件,省略FILE是将在标准输入里查找。
常用的参数:
-c 只显示匹配行的次数
-i 搜索时不区分大小写
-n 输出匹配行的行号
-v 输出不匹配的行
-o 仅显示匹配到的内容
-w 匹配单词
-A # 连同匹配行的下#行一并显示,#代表任意数字
-B # 连同匹配行的上#行一并显示,#代表任意数字
-C # 连同匹配行的上下#行一并显示,#代表任意数字
-R或-r 递归搜索目录或子目录下匹配的字所在文件(可配合find命令
-E 相当于egrep 支持扩展的正则表达式
-F 相当于fgrep 不支持正则表达式
--color对匹配的内容以颜色显示
-V 显示grep版本
【Attention】
1.FILE可以使用shell的通配符在多个文件中查找PATTERN
2.通常必须使用单引号将整个模式PATTERN括起来
3.grep命令不会对输入文件进行任何修改或影响 可以使用输出重定向保存文件
4.如果使用grep命令查找指定的字符串(不使用正则表达式),PATTERN可以不用单引号括起来
grep使用举例:
在文件 myfile 中查找包含指定的字符串的行
$ grep osmond myfile
$ fgrep osmond myfile
在文件myfile1 myfile2 myfile3 中查找包含是定字符串的行
$ grep 'osmond' myfile1 myfile2 myfile3
$ fgrep 'osmond' myfile1 myfile2 myfile3
在当前目录的所有文件中查找包含指定的字符串的行
$ grep osmond *
$ fgrep osmond *
在当前目录的所有文件中查找包含字符 * 的行
$ grep ''
$ fgrep ''
在文件myfile 中查找包含字符 $ 的行
为了强制将$传递给grep命令,必须使用\,\字符可通知grep命令将其后的字符视作原义再发而不是元字符
如果使用fgrep名, 则可以不必使用\的转义字符
$ grep \$ myfile
$ grep '$' myfile
$ fgrep $ myfile
$ fgrep '$' myfile
匹配myfile中所有空行
$ grep '^$' myfile
显示myfile中第一个字符为字母的所有行
$ grep '^[a-zA-Z]' myfile
在文件myfile中查找首字母不是 # 的行(即过滤掉注释行)
$ grep -v '^#' myfile
显示所有包含至少有5个连续小写字符的字符串的行
$ grep '[a-z]{5}' myfile
在文件中查找包含日期格式(yyy-mm-dd)的行
$ grep '[12][0-9]{3}-[01][0-9]-[0-3][0-9]' myfile
$ egrep '[12[0-9]{3}-[01][0-9]-[03][0-9]' myfile
在文件中查找与abc 或xyz 字符串匹配的所有行
$ egrep 'abc|xyz' myfile
通过管道过滤ls输出的内容,只显示以可写的文件或目录的行
$ ls -l |grep '[-d].w..w..w.'
通过管道过滤ls输出的内容,只显示以~ 或 - 或 .bak结尾的行
$ ls | egrep '(~|-|.bak)$'
- 例:grep -n DATE *.c
- 查找含有正则表达式DATE的行,并打印行号
- 当文件数超过一个时,除了输出行号,还输出文件名
- 例:grep -v '[Dd]isable' dev.stat>dev.active
- 取消文件中所有含有指定模式的行,生成新文件
- 例:grep -i richard telnos
- 在文件中检索字符串richard,不顾字母的大小写