首页 > 代码库 > grep基础

grep基础

基本格式为:

grep option pattern file-list

grep命令用来抽出file-list中我们需要的数据,同时过滤掉那些不关心的内容。我们关心的内容体现在pattern中,它表现为一个字符串,或者是一个正则表达式,然后grep读取file-list的每一行内容,如果遇到匹配pattern的行,就把他输出到屏幕上;不匹配的那些就忽略掉。

先说pattern,当它是一个单独的字符串时,直接写就可以了;但是如果里面包含空格或其他分隔符,就需要用引号(单、双均可)括起来。当pattern表现为一个正则表达式时,如果不含控制字符,可以直接写;有控制字符时,必须要加上引号。(对于控制字符,可以搜一下或者自己在实践中总结。。其实保险起见,最好都加上引号)

file-list就是说可以检索多个文件,不同文件之间用空格隔开。file-list其实也可以用一个正则表达式代替,正则表达式好有用的说。。

剩下的就是option了,隆重介绍下:

1、-数字n

匹配到某一行时,同时把该行的上下n行显示出来

2、-b

在每行前打印字符的字节偏移量

所谓字节偏移量,我查了一些资料同时做了一些实验,得出的结论是,每行前面给出的这个偏移值指的是,该行的那个匹配模式距离文本中第一个匹配模式的距离,这个距离是以字节为单位的,计算方法就是,两个模式之间的字符数量乘以8,因为每个字符需要用8个字节表示。这跟系统设置有关,我的是ubuntu系统,并且LANG=zh_CN.UTF-8,这时每个字符,不管是不是中文字符都是用8个字节表示的。

目前还不知道这个选项有啥用。

3、-c

只显示匹配行的编号,不显示该行内容。

4、-f

指定pattern来源(比如一个文件),而不是从终端输入。

5、-h

不显示文件名前缀。

当检索多个文件时,grep默认在匹配行的前面输出文件名,使用这个选项会阻止这一行为。

6、-i

忽略pattern中的大小写。默认情况下,grep是严格区分pattern中的大小写的。

7、-q

这是一个非常重要的选项,因为在某些情况下,我们不想要grep把匹配行的内容打印出来(比如只想知道出口状态时),那么这个选项就派上用场了。

8、-l

只打印匹配的文件名。显然这是在检索多个文件时使用的(好吧,单个文件有时也有用)。

9、-L

与上面相反,只打印不匹配的文件名。

10、-n

在匹配行的前面打印行号。

11、-s

不显示错误信息,比如模式或文件不存在,grep似乎默认是有这个选项的。

12、-v

只显示不匹配的行。。。


主要就这些吧。



grep基础