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,不顾字母的大小写

results matching ""

    No results matching ""