正则表达式:模式匹配语言,有其自身语法和规则,其中最重要的是元字符,通常用单引号括起
使用greb匹配文本(greb基本用法是提供一个正则表达式和一个文件,但该文件中应该有此正则表达式的匹配项)
grep : (global research print), 根据某个模式,搜索文本,并将符合模式的文本行显示出来。
模式 (pattern): 由文本字符和正则表达式的元字符组合而成的匹配条件。
Greb选项
-i 使用提供的正则表达式,但不会强制区分大小写
-v 1.仅显示不包含正则表达式匹配项的行(注:默认情况下显示匹配到的行)2.匹配所有以#或;开头的行(注:#和;表示行将被解释为注释的典型字符)
-r 将递归的匹配正则表达式的数据搜索应用到一组文件或目录中
-e 若使用多个-e选项,则可以提供多个正则表达式,并将于逻辑or一起使用
-A<number> 显示正则表达式匹配项之后的行数
-B<number> 显示正则表达式匹配项之前的行数
-o 表示只显示被模式匹配到的字符串,默认情况下显示匹配到的整行内容
--color 将匹配到的字符串以高亮颜色显示出来
正则表达式的基本语法
^ 锚定行首,此字符串后边的任意内容必须出现在行首 例: grep "^l" file3
$ 锚定行尾,此字符前面的任意内容必须出现在行尾 例:[[email protected] Desktop]$ grep "e$" file3
^$ 表示匹配空白行例:[[email protected] Desktop]$ grep "^$" file3
\< 锚定词首,其后面的任意字符必须作为单词的首部出现 ,例:[[email protected] Desktop]$ grep "\<lo" file3
lover
look
lookuop
\> 锚定词尾,其前面的任意字符必须作为单词的尾部出现 ,例:[[email protected] Desktop]$ grep "ily\>" file3
my family is farm
we are family
\<\> 精确匹配 例:[[email protected] Desktop]$ grep "\<family\>" file3
my family is farm
we are family
* 匹配其前面的字符任意次 例:[[email protected] Desktop]$ grep "o*" file3(匹配出现o任意次的字符) [[email protected] Desktop]$ grep "o*t" file3(匹配前面的o可以出现任意次,但必须以t结尾) [[email protected] Desktop]$ grep "oo*" file3(表示第一个o必须匹配,*紧连的o可出现任意次)
.* 表示任意长度的任意字符 例:[[email protected] Desktop]$ grep ".oo*" file3
\? 匹配其前面的字符一次或者零次 (a?b), 有时候 ? 要使用 \ 转义才可以使用。例:[[email protected] Desktop]$ grep "lo\?" file3(表示l必须匹配,o可出现一次或零次)
\{m,n\} \ 用来转义,防止 {} 被 bash 来解析;匹配其前面的字符至少 m 次,最多 n 次 ;(\{1,\}: 表示最少 1 次,无上限 ) 。 \{0,3\} 表示最多 3 次 例:[[email protected] Desktop]$ grep "loo\{1,2\}" file3(表示lo必须匹配,紧跟的o至少1次,最多两次)
. 匹配任意单个字符 例:[[email protected] Desktop]$ grep ".k" file3(后面的k必须匹配,前面任意匹配一个字符)
look
lookuop
took
lo ok root rool
[] 匹配指定范围内的任意单个字符 ,例:[[email protected] Desktop]$ grep "[famhs]" file3(表示只要有括号里的任何一个,则都可以匹配)
cat
my family is farm
we are family
me
[^] 匹配指定范围外的任意单个字符 ,例:[[email protected] Desktop]$ grep "[^foamhs]" file3(表示只要不是括号里的单个字符就能匹配)
\(\) 将内容分组 , 也可以做后向引用 ,\1 表示调用前面第一个 () 中匹配到的内容,依次类推 ;
如: \(ab\)* 表示任意数量 ab 字符串 , 把 ab 当做一个整体, ab 可以出现 0 次或多次 ,* 修饰的是 ab 这个整体
例:
He love his lover
She like her liker
He love his liker
She like her lover
1.[[email protected] Desktop]$ grep "\(l..e\)" txt(表示匹配以l开头以e结尾,中间可匹配两个字符的任意字符)
he love his lover
she like her liker
he love his liker
she like her lover
2.[[email protected] Desktop]$ grep "\(l..e\)." txt(表示匹配以l开头以e结尾,中间可匹配两个字符且后匹配任意一个单个字符)
he love his lover
she like her liker
he love his liker
she like her lover
3.[[email protected] Desktop]$ grep "\(l..e\).*" txt
he love his lover
she like her liker
he love his liker
she like her lover
4.[[email protected] Desktop]$ grep "\(l..e\).*\1" txt(表示匹配前面第一个括号里匹配到的内容)
he love his lover
she like her liker