首先介绍下grep命令:
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。它是linux中最常用的“文本处理工具之一”,与sed、awk合称为linux中的“三剑客”。
选项:
示例:
为了方便,准备了一个测试文件test.txt,内容如下
如果我们想要搜索包含hello字符串的行,则可以使用如下命令:
上图中的命令表示使用grep命令,在test.txt文件中搜索包含“hello”字符串的行,并将包含hello字符串的行打印出来。
默认情况下grep是区分大小写的,如果要想不区分大小写把想找的内容搜索出来则可以加上 -i 的参数,如下所示:
因为是用来实验的,所以测试文件中所写的内容比较少,一般情况在平时工作中一个文件里的内容少则几十行,多则几百上千行,而我们想要确定我们想要搜索的内容在这个文件里第几行需要怎么办?
加上一个 -n 的参数就可以解决上述的问题,如下所示:
如图所示,利用-n 参数就可以把要检索的内容的行数显示出来。
如果我们只想知道有多少行包含我们检索的内容,而不在乎哪些行包含这些内容,我们可以使用如下命令,获取到符合条件的行数。
有的时候,我们需要反向查找,比如查找“不包含某个字符串的行”,这个时候“-v”选项就可以解决这个问题
上述表示查找出文本中不包含“test”的行。
某些场景下,我们需要同时从多个目标中匹配,什么意思呢?来,我们看下示例就知道了
上例子我们同时检索了包 hello 和 abc字符串,包含这两个字符串中的每一行都被打印出来,没错,就像上面的图例一样,使用“-e”选项可以同时匹配多个目标,多个目标存在“或”关系,即匹配到其中的任意一个都算作匹配成功。
在写脚本时,你可能只是想要利用grep判断文本中是否存在某个字符串,你只关心有没有匹配到,而不关心匹配到的内容,你只关心有,或者没有,这时,我们可以使用grep的静默模式,示例如下。
当使用"-q"选项时,表示grep使用静默模式,静默模式下grep不会输入任何信息,无论是否匹配到指定的字符串,都不会输出任何信息,所以,我们需要配合"echo $?"命令,查看命令的执行状态,如果返回值为0,证明上一条grep命令匹配到了指定的字符串,如果返回值为1,则证明上一条grep命令没有匹配到指定的字符串,就像上图示例中显示的那样,静默模式下,grep没有输出任何信息,当我们在test.txt文本中查找"test"字符串时,可以匹配到结果,当在文本中查找"1111111111"字符串的时候,没有匹配到结果,所以,我们只关心有没有匹配到指定字符时,可以使用"-q"选项,但是需要配合"echo $?"命令查看执行状态。
grep还有很多其它选项,我只是列举了常用的一些选项,其它选项可以自行练习。
其实,除了grep命令,其实还有egrep命令,还有fgrep命令(fast grep),它们有各自的特点。
grep:支持基本正则表达式
egrep:支持扩展正则表达式,相当于grep -E
fgrep:不支持正则表达式,只能匹配写死的字符串,但是速度奇快,效率高,fastgrep
【参考资料:http://www.zsythink.net/archives/1733】
原文:https://www.cnblogs.com/sxFu/p/11777467.html