Shell学习---grep

来源:互联网 发布:綦美合 知乎 编辑:程序博客网 时间:2024/06/08 08:33
grep即全面搜索正则表达式并把行打印出来。GREP是一种强大的文本搜索工具,它能使用正则表达式搜素文本,并把匹配的行打印出来,grep也是Linux中最广泛使用的命令之一。

grep的一般格式为:

grep [选项] [模式] [文件...]

grep命令由选项、模式和文件三部分组成,它在一个或多个文件中搜索满足模式的文本行,模板后的所有字符串被看做文件名,文件名可以有多个,搜索的结果被打印到屏幕,不影响原文件的内容。grep命令的选项用于对搜索过程进行补充说明。

1.-c 选项

-c选项表示输出匹配字符串行的数量,默认情况下,grep命令打印出包含模式的所有行,一旦加上-c选项,就只显示包含行的数量。

2.-n选项

-n选项列出所有的匹配行,并显示行号。默认情况下,grep搜索单个文件时,只显示每行的内容,搜索多个文件时,显示文件名及每行的内容,加上-n选项后,将在行内容前附加显示行号。

3.-v选项

-v选项显示不包含模式的所有行。

4.-i选项

默认情况下,grep命令对大小写是敏感的,如果加上-i选项就表示grep命令不区分大小写。

5.-h选项

-h选项表示查询多文件时不显示文件名,默认情况下,grep命令查询多个文件时,在匹配行之前显示文件名,加上-h选项后,grep命令将不再显示文件名。

6.-l选项

-l选项表示只列出符合匹配的文件名,而不列出具体匹配行。

7.-s选项

-s选项表示不显示不存在或无匹配文本的错误信息,默认情况下,grep在待搜索文件不存在或搜索不到符合模式的文本行时将打印错误信息。

8.-r选项

默认情况下,grep命令只对当前目录下的文件进行搜索,而不对子目录中的文件进行搜索。-r选项表示递归搜索,不仅搜索当前目录,而且搜索子目录。

9.-w和-x选项

grep命令的模式是支持正则表达式的,正则表达式的元字符将被解释成特殊的含义,-w选项表示匹配证词,即以模式的字面含义去解析它。

例如:

grep abc* *    //搜索包含以abc开头字符串的文本行
               //(也可以)搜索包含abc的文本行

此语句没有加-w,模式中的*被解析为任意字符,即搜索包含以abc开头的字符串文本行;

grep -w abc* * //加入-w选项后,*被解析为字面含义

此语句匹配abc、abcc、abccc....

-x选项是匹配整行,即只有当文件中有整行内容与模式匹配时,grep命令才输出该行结果。

所以可见,-w是整词匹配,而-x是整行匹配。

10.-q选项

grep默认情况下是输出结果,但是,grep命令后一旦加上-q选项,grep将不再输出任何结果,而是以状态表示搜索是否成功,退出状态0表示搜索成功,退出状态1表示未搜索到满足模式的文本行,退出状态2表示命令或程序由于错误而未能执行。

echo $?命令用于输出上条命令的退出状态

11.-b和-o选项

grep -b选项打印匹配行距文件头部的偏移量,以字节为单位。如果在-b选项后再加上-o选项,grep命令将打印匹配的词距文件头部的偏移量。



//grep和正则表达式结合使用的一组例子

将带有元字符的正则表达式用于grep命令能够更灵活地匹配信息,使用时需要使用单引号将正则表达式引起来,以免发生一些不可预知的错误。

1.匹配行首

元字符"^"表示行首。

例如:

grep ^a *       //表示搜索所有以a开头的行

grep -c ^$ *    //搜索所有文件的空白行,只打印行数

grep -c ^[^$] *  //搜索所有文件的非空白行,只打印行数

2.设置大小写

利用-i符号可以使grep命令不区分大小写,当然也可以利用[] 符号来实现这一功能。

grep [Hh]ello *

3.匹配重复字符

grep ^-*B *

匹配以0次或多次-开头,‘-’后面是'B'的行

4.转义符

如果匹配的目标字符串包含元字符,则需要利用转义符"\"屏蔽其意义。如果需要搜索包含csu.edu.cn字符串的行,由于句号"."字符是元字符,所以,需要在"."符号之前加上"\"符号进行转义。

grep csu\.edu\.cn *
0 0
原创粉丝点击