一个正则表达式是由普通字符和特殊字符组成的文字模式,将某个字符模式与所搜索的字符串进行匹配。简单的说,就是用来搜索匹配的一个很好的工具。
正则表达式分为:基本正则表达式和扩展正则表达式两类
基本正则表达式的元字符如下:
. :匹配任意单个字符
*:匹配前一个字符的任意次
.*:任意长度的任意字符
[]:指定范围内的任意单个字符
a\{m,n\}:a这个字符至少出现m次,最多出现n次
a\{m,\}:a这个字符至少出现m次,
a\{0,n\}:a这个字符最多出现n次
?:匹配前一个字符出现0次或1其次
锚定符:
^:锚定行首
$:锚定行尾
^$:锚定空白行
\<:锚定词首
\>:锚定词尾
引用:
\(\)
接下来给每个元字符配备一个例子
“.”
上图“ . ” 匹配任意单个字符,root,r/ft中的o、/、f,都属于任意单个字符
“*”
上图星号“*”匹配b任意次,也可以是0次,如图中的ac
“.*”
上图是以r开头t结尾,中间是任意字符
第一行开头就是root,已经匹配完了,但是最后又以t结尾,这个称为贪婪模式,尽量匹配到最长
上图表示以r开头以t结尾中间为任意小写字母
\{m,n\}
表示图上b至少显示1次,最多显示两次的行
\{m,\}
上图表示以r开头t结尾,中间的小写字母至少出现两次的行
\{0,n\}
表示b至少出现0次,最后出现2次的行
grep的选项
-v: 对结果去反
例:
这个是空白至少出现1次的,图中红色标记都是空白
反之 -v :grep -v "[[:space:]]\{1,\}" /etc/passwd
锚定符:
^:
上图中显示以root开头的行
$:
显示以n结尾的行
^$:
显示空白行
\<:
显示以r开头的单词
\>:
显示以r结尾的单词
\(\):
上图a为文件 1用来匹配括号里的l..e
表示以l..e开头后面跟任意字符任意次,并且以r结尾的行
扩展正则表达式元字符:
( )
{}
+: 次数匹配,匹配其前的字符至少1次;
|:或者
注:使用扩展正则表达式格式必须为grep -E 或者egrep
( ):
和正则表达式中的\(\)效果一样
{}:
和\{m,\}效果一样
+:
匹配b至少出现一次
|:
显示以d或D开头的dog
END