grep命令与正则表达式

一、什么是grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把它打印出来),grep是强大的文本搜索工具,它使用正则表达式并把匹配到的行打印出来。
UNIX的grep包含三种grep、egrep、fgrep,其中egrep和fgrep和grep的差别很小,egrep是grep的扩展,它能支持更多的re元字符;fgrep是fixed grep或者fast grep,它们把所有的字母都看作单词。正则表达式中的元字符表示回其本身的字面意义,Linux使用得是GNU版本的grep它的功能更强,能通过-G、-E、-F命令选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板,如果模板包括空格则必须被引用,模板后的所有字符串被看做文件名,搜索的结果被展现在屏幕上不会影响原文的结果。
grep可用于shell脚本,可以通过grep的返回值来说明搜索的状态,模板搜索成功的话就返回0,模板搜索失败的话就会返回-1,如果搜索的文件不存在就返回2。

二、grep的选项和常见命令
grep的常见参数:

grep -c :统计符合条件的字符串出现的次数
grep -E :支持扩展正则表达式
grep -R:此参数的效果和指定“-d recurse”参数相同
grep -i :忽略字符的大小写
grep -n :输出匹配行的同时在前面加上文件名,以及显示到的字符串前面加上行号
grep -v:显示没有“搜索字符串”内容的那一行
grep -l:列出文件内容中有搜索字符串的名称
grep -L:输出不匹配的文件名
grep -q:不显示任何信息
grep -o:只输出文件中匹配到的部分
grep -h:抑制文件名的输出
-color=auto:将匹配到的字符串高亮出来

三、grep与正则表达式
[email protected]模式的字符串用来表示的是一个email的地址,yyy.yyy.yyy.yyy模式的字符串就可以用来表示ip地址。
字符类:
上面的x和y在模式上表示一个字符,但是取值范围是一类中的任意一个
数量限定符:
邮件地址的每一个部分可以有一个或多个x字符,ip地址的每个不封可以有1-3个y字符。
位置限定符:
用来描述各种字符类以及普通字符之间的位置关系。


规定一些特殊语法表示字符类、数量限定符、位置的关系,用这些特殊的语法和普通的字符一起就表示一个模式,这就是正则表达式。
正则表达式的参数用单引号括起来的原因:
因为正则表达式中用到的很多特殊的字符在shell中也有特殊的含义{例如:},只有单引号括起来才能保证这些字符原封不动的传给grep命令,而不会被shell解释掉。
字符类:
.
含义:匹配任意一个字符
[]
含义:匹配括号中的任意一个字符
-
含义:在括号中表示字符的范围
^
数量限定符:

含义:跟在它前面的单元匹配零次或一次
+
含义: 跟在它前面的单元应匹配一次或多次
*
含义:紧跟在它前面的单元应匹配零次或多次
{N}
含义:紧跟在它前面的单元应匹配N次
{N,}
含义:紧跟在它前面的单元至少应该N次
{,M}
含义:紧跟在它前面的单元应匹配最多M次
{N,M}
含义:紧跟在它前面的单元应匹配至少N次,最多M次
* 位置限定符:*
^
含义:匹配行首的位置
$
含义:匹配行末的位置
\<
含义:
匹配单词开头的位置
>
含义:匹配单词结尾的位置
\b
含义:匹配单词开头或结尾的位置
\B
含义: 匹配非单词开头和结尾的位置
其他特殊字符:
\
含义:转义字符,将普通字符转义为特殊字符,特殊字符转义为普通字符
()
含义:将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符。
|
含义:连接两个子表达式,表示或的关系。

grep命令与正则表达式_第1张图片

这里写图片描述

你可能感兴趣的:(Linux,linux学习历程)