shell脚本【命令4】grep:文本检索

一、综述

        grep是一个强大的文本检索工具。

        其基本语法格式简写如下:

        grep  options  string  file

     即:从特定file中,检索string。当然也不限定是file,grep接收标准输入,所以,grep可以用于管道符,和标准输入重定向。

 

二、使用介绍

2.1  基本选项

          -i:--ignore-case

                表示在进行比较时忽略字母的大小写。

                [ex] grep -i az *   意思是在当前目录下,检索所有文件中含有内容为az的文件

          -v:--invert-match

                表示检索不包含给定字符串或模式的所有文本行。

                [ex0]: 检索文本中,包含module关键字的行,但是要去掉包含endmodule关键字的行。

grep -rni module file.v | grep -v endmodule  #先检索所有的信息,然后剔除其中包含endmodule关键字的行
grep -rni '^module' file.v                   #这种用了正则表达式,因为module只出现在行首;而恰恰endmodule不具这种特性

          -f  FILE:

                从一个文件中,取string,比如file文件中去放要检索的字符串string,在string的地方可以直接用-f file

          -e:

                可以用于同时检索多个字符串,string的位置可以用-e string1 -e string2

                同时,可以与-f进行组合使用,string的位置替换为-e pattern -f file,作用等同于同时检索了两个pattern

          -c:--count

                 统计行数。用于统计有多少匹配的项有多少行。count

          --color:

                高亮标示匹配的字符串

          -r:

                 目录递归。

                [ex1]:

grep -r "待查找内容" ./       #意思是检索当前目录下的,所有文件;及当前目录下的所有子目录的文件。

 

        输出信息控制选项:

          -H:--with-filename

                输出每一个匹配项,所在的文件的文件名

                如何一次检索多个文本文件中的文本?

                grep string file1 file2……

          -n:--line-number

                输出的项,显示其在源文件中,是第几行

                [ex2]:

grep -rn string ./      #表示检索当前目录下所有文件(-r),看是否包含"string"字符串;并显示该string在第几行(-n)

          -A NUM:

                不同组别输出信息之间插入一行“—”符号,个数按照NUM来进行。

 

          [ex3]: 如果想准备检索一个string,比如就想检索chen,而不想检索chen_H, H_chen, chenH, Hchen等等。

grep -rn \ chen\  ./   #两个反斜杠后面有两个空格,这两个空格后面会被shell解析后,加到chen前后,变为“ chen ”, 然后再在文件中检索" chen "

 

2.2  同时从多个文件中检索文本:

    前面也提到grep可以支持同时检索多个文件。

    ① 可以直接把文件一个个地接在grep最后

    ② 如果是具有相同特性的一类文件,也可以用通配符来匹配这些文件。利用shell来解析这些通配符,并扩展得到这些文件。

    比如:grep string *

    在提交给grep工具之前,shell会自动扩展这些文件名,替换为当前目录下的所有文件名。

    需要注意的是,这些是通配符,通过shell来解析的:点击查看通配符的使用

 

      注意:如果string中包含的有正则表达式,两边需要要单引号,表达是提交给grep工具进行解析的。

      [ex4]:

grep -i '^chen' *

        表示在当前目录下的所有文件中(“*”通配符的作用,shell解析,不加单引号),进行行首chen字符串匹配,string的正则表达式是提交给grep工具的,所以要加单引号。

 

三、支持的正则表达式

      grep工具支持正则表达式的检索,在提交给grep工具的string参数中,可以使用正则表达式来使检索更加方便。

    如果grep想要支持扩展的正则表达式,需要使用-E选项,或者是egrep

    如果想支持Perl规范正则表达式,可以用-P选项。

    需要注意的是,如果使用的是正则表达式,在string两端需要打上单引号,表示是提交给grep工具,而非shell来解析。

    POSIX标准下的正则表达式:点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值