Linux grep命令


Linux 系统的学习过程中,会认识很多命令,记住这些命令会对你学习 Linux 系 统,有很好的提高。你可能会看到 grep 命令,这里将介绍 grep 命令的知识。 1.作用 Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索 文本,并把匹配的行打印出来。grep 全称是 Global Regular Expression Print, 表示全局正则表达式版本,它的使用权限是所有用户。 2.格式 grep [options] 3.主要参数 [options]主要参数: -c:只输出匹配行的计数。 -I:不区分大小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 pattern 正则表达式主要参数: \:忽略正则表达式中特殊字符的原有含义。 ^:匹配正则表达式的开始行。 $: 匹配正则表达式的结束行。 \<:从匹配正则表达式的行开始。 \>:到匹配正则表达式的行结束。 [ ]:单个字符,如[A]即 A 符合要求 。 [ - ]:范围,如[A-Z],即 A、B、C 一直到 Z 都符合要求 。 。:所有的单个字符。 * :有字符,长度可以为 0。 4.grep 命令使用简单实例 $ grep ‘test’ d* 显示所有以 d 开头的文件中包含 test 的行。 $ grep ‘test’ aa bb cc 显示在 aa,bb,cc 文件中匹配 test 的行。 $ grep ‘[a-z]\{5\}’ aa 显示所有包含每个字符串至少有 5 个连续小写字符的字符串的行。 $ grep ‘w\(es\)t.*\1′ aa 如果 west 被匹配,则 es 就被存储到内存中,并标记为 1,然后搜索任意个字符 (.*),这些字符后面紧跟着另外一个 es(\1),找到就显示该行。如果用 egrep 或 grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。 5.grep 命令使用复杂实例 假设您正在’/usr/src/Linux/Doc’目录下搜索带字符串’magic’的文件: $ grep magic /usr/src/Linux/Doc/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the magic SysRQ key? 其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。 默认情况下,’grep’只搜索当前目录。如果此目录下有许多子目录,’grep’ 会以如下形式列出: grep: sound: Is a directory 这可能会使’grep’的输出难于阅读。这里有两种解决的办法: 明确要求搜索子目录:grep -r 或忽略子目录:grep -d skip 如果有很多输出时,您可以通过管道将其转到’less’上阅读: $ grep magic /usr/src/Linux/Documentation/* | less 这样,您就可以更方便地阅读。 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您 忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。 下面还有一些有意思的命令行参数: grep -i pattern files :不区分大小写地搜索。默认情况区分大小写, grep -l pattern files :只列出匹配的文件名, grep -L pattern files :列出不匹配的文件名, grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹 配’magic’,而不是’magical’), grep -C number pattern files :匹配的上下文分别显示[number]行, grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行, grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。 这里还有些用于搜索的特殊符号: \< 和 \> 分别标注单词的开始与结尾。 例如: grep man * 会匹配 ‘Batman’、’manic’、’man’等, grep ‘\’ 只匹配’man’,而不是’Batman’或’manic’等其他的字 符串。 ‘^’:指匹配的字符串在行首, ‘$’:指匹配的字符串在行尾, 6. POSIX 字符类 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是 A-Za-z0-9 的另一个写法。要 把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在 Linux 下的 grep 除 fgrep 外,都支持 POSIX 的字符类。 [:alnum:] 文字数字字符 [:alpha:] 文字字符 [:digit:] 数字字符 [:graph:] 非空字符(非空格、控制字符) [:lower:] 小写字符 [:cntrl:] 控制字符 [:print:] 非空字符(包括空格) [:punct:] 标点符号 [:space:] 所有空白字符(新行,空格,制表符) [:upper:] 大写字符 [:xdigit:] 十六进制数字(0-9,a-f,A-F) 7.Grep 命令选项 -? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行 的上下 2 行。 -b,--byte-offset 打印匹配行前面打印该行所在的块号码。 -c,--count 只打印匹配的行数,不显示匹配的内容。 -f File,--file=File 从文件中提取模板。空文件中包含 0 个模板,所以什么都不匹配。 -h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀。 -i,--ignore-case 忽略大小写差别。 -q,--quiet 取消显示,只返回退出状态。0 则表示找到了匹配的行。 -l,--files-with-matches 打印匹配模板的文件清单。 -L,--files-without-match 打印不匹配模板的文件清单。 -n,--line-number 在匹配的行前面打印行号。 -s,--silent 不显示关于不存在或者无法读取文件的错误信息。 -v,--revert-match 反检索,只显示不匹配的行。 -w,--word-regexp 如果被<和>引用,就把表达式做为一个单词搜索。 -V,--version 显示软件版本信息。 8.实例 要用好 grep 这个工具,其实就是要写好正则表达式,所以这里不对 grep 的所有 功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。 $ ls -l | grep '^a' 通过管道过滤 ls -l 输出的内容,只显示以 a 开头的行。 $ grep 'test' d* 显示所有以 d 开头的文件中包含 test 的行。 $ grep 'test' aa bb cc 显示在 aa,bb,cc 文件中匹配 test 的行。 $ grep '[a-z]' aa 显示所有包含每个字符串至少有 5 个连续小写字符的字符串的行。 $ grep 'w(es)t.*' aa 如果 west 被匹配,则 es 就被存储到内存中,并标记为 1,然后搜索任意个字符 (.*),这些字符后面紧跟着另外一个 es(),找到就显示该行。如果用 egrep 或 grep -E,就不用""号进行转义,直接写成'w(es)t.*'就可以了。
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

combox

贡献于2011-11-10

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf