好多时侯,我们并不须要列举文件的全部内容,而是从文件中找到包含指定信息的这些行,要实现这个目的,可以使用grep命令。
grep命令作为Linux文本处理三剑客的一员,另外两个是sed和awk,它们会在后续章节中作详尽介绍。
grep命令的来历可以溯源到UNIX诞生的初期,在UNIX系统中,搜索的模式(patterns)被称为正则表达式(regularexpressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀global(全面的),一旦找到相匹配的内容,用户如同将其输出(print)到屏幕上,而将这一系列的操作整合到一起就是globalregularexpressionsprint,而这也就是grep命令的全称。
grep命令才能在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或短语。
正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了物理表达式,通过使用操作符将较小的表达式组合成一个新的表达式。正则表达式可以是一些纯文本文字,也可以是拿来形成模式的一些特殊字符。为了进一步定义一个搜索模式,grep命令支持如表1所示的这几种正则表达式的元字符(也就是转义)。
表1正则表达式的键值键值功能
c*
将匹配0个(即空白)或多个字符c(c为任一字符)。
将匹配任何一个字符,且只能是一个字符。
匹配方括弧中的任意一个字符。
匹配除方括弧中字符外的所有字符。
锁定行的开头。
锁定行的结尾。
须要注意的是,在基本正则表达式中,如键值*、+、{、|、(和)等,早已丧失了它们原先的含意,而若要恢复它们原先的含意linux site:infoq.cn,则要在之前添加反斜杠,如*、+、{、|、(和)。
grep命令是拿来在每一个文件或中(或特定输出上)搜索特定的模式,当使用grep时,包含指定字符模式的每一行内容,还会被复印(显示)到屏幕上linux管道命令 grep,并且使用grep命令并不改变文件中的内容。
grep命令的基本格式如下:
root@localhost~
#grep模式文件名
这儿的模式,要么是字符(串),要么是正则表达式。而此命令常用的选项以及各自的含意如表2所示。
表2grep命令常用选项及涵义选项含意
-c
仅列举文件中包含模式的行数。
-i
忽视模式中的字母大小写。
-l
列举带有匹配行的文件名。
-n
在每一行的最上面列举行号。
-v
列举没有匹配模式的行。
-w
把表达式当作一个完整的单字符来搜救,忽视这些部份匹配的行。
注意,假若是搜索多个文件,grep命令的搜索结果只显示文件中发觉匹配模式的文件名;而假如搜索单个文件,grep命令的结果将显示每一个包含匹配模式的行。
【例1】假设有一份emp.data职工清单linux认证,如今要搜索此文件,找出职位为CLERK的所有职工linux管道命令 grep,则执行命令如下:
root@localhost~
#grepCLERKemp.data
#忽视输出内容
而在此基础上,假如只想晓得职位为CLERK的职工的人数,可以使用“-c”选项,执行命令如下:
root@localhost~
#grep-cCLERKemp.data
#忽视输出内容
【例2】搜索emp.data文件,使用正则表达式找出以78开头的数据行,执行命令如下:
root@localhost~
#grep^78emp.data
#忽视输出内容
grep命令的功能十分强悍,通过借助它的不同选项以及变化万千的正则表达式,可以获取任何我们所须要的信息。本节所介绍的grep命令,只介绍了它的一部份基础知识,例如说,grep命令可用的选项还有好多,且用法也五花八门,不过对于初学者来说,本节所介绍的内容早已足以应付多数Linux系统的日常工作了。