一、为什么要用到文本过滤工具?
Linux的基本概念之一,一切皆文件,平时我们在做大多数操作的时候,都是在对文件进行操作,此时我们就需要一种文本搜索工具,可以根据我们所指定的特定格式的内容,过滤出我们想要的段落,从而实现在一段复杂的文本中,过滤出特定的内容,而我们把这段特定的格式叫做模式;
Global search REgular expression and Printout the line.
全局搜索正则表达式并打印出符合条件的行
文本搜索工具,可以根据用户所指定的“模式”(pattern)对目标文件进行过滤,显示被模式匹配到的行;
正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配功能;
元字符:不表示字面意义,而表示通配功能的字符
正则表达式:
基本正则表达式
扩展正则表达式
用法:
grep [OPTION]...‘PATTERN’ FILE...
option:
-v:反向选取,显示出匹配指定模式以外的内容
-o:仅显示匹配到的内容
-i:忽略字符大小写
-E:使用扩展的正则表达式
-A#:显示匹配到的行,及其后#行的内容
-B #:显示匹配到的行,及前#行的内容
-C #:显示匹配到的行,及其前后# 行的内容
PATTERN:模式,可以是普通的字符串,也可以是正则表达式(模式需加引号)
字符匹配:
.: 匹配任意一个单个字符;
*: 匹配其前的任意长度任意字符;
\?: 匹配其前字符0个或1个;
\+: 匹配其前字符至少一次;
[:digit:]: 匹配全部数字[0-9]
[:lower:]: 匹配全部小写字母 [a-z]
[:upper:]: 匹配全部大写字母 [A-Z]
[:alpha:]: 匹配全部大小写字母[a-z][A-Z]
[:alnum:]: 匹配大小写字母和数字 [a-z][A-Z][0-9]
[:punct:]: 匹配所有标点符号
[:space:}: 匹配全部空白字符空格、Tab等
[^]: 匹配指定模式以外的字符
\{n\}: 匹配其前字符出现了n次;
\{n,\}: 匹配其前字符出现了至少n次;
\{n,m\}: 匹配其前字符出现了n到m次;
.*: 匹配任意长度任意字符;
位置锚定:
^: 锚定行首
$: 锚定行尾
^$: 锚定空白行
\<: 锚定词首
\>: 锚定词尾
\b: 锚定词首或词尾,功能同 \< 或 \>
分组:
\(\): 常用在模式中前面匹配到了指定的字符串,而这段字符后面也需要引用相同的字符串;
\(\):匹配 \1 \2 \3 引用 ;
模式自左而右,引用第# 个左括号以及与其基本右括号之间的模式匹配到的内容;
例:
root:x:0:0::/home/root:/sbin/nologintom:x:0:0::/home/tom:/sbin/nologin
此时我想匹配用户名和家目录
# grep ‘\(^\<[[:alpha:]]*\>\).*\1’filename
extended grep :扩展的 grep
注:扩展的和上面用法相同,只是\+、\?、\(\)、\{\} 在扩展中不用转义,此处就不一一举例;
egrep [OPTION]filename
字符匹配:
.: 匹配单个任意字符;
*: 匹配其前字符0次1次或多次
+: 匹配其前字符至少一次
?: 匹配其前字符0次或1次
[:digit:]:匹配全部数字[0-9]
[:lower:]:匹配全部小写字母 [a-z]
[:upper:]:匹配全部大写字母 [A-Z]
[:alpha:]:匹配全部大小写字母[a-z][A-Z]
[:alnum:]:匹配大小写字母和数字 [a-z][A-Z][0-9]
[:punct:]:匹配所有标点符号
[:space:]:匹配全部空白字符空格、Tab等
[^]: 匹配指定模式以外的字符
{n}: 匹配其前字符出现了n次;
{n,}: 匹配其前字符出现了至少n次;
{n,m}: 匹配其前字符出现了n到m次;
.*: 匹配任意长度任意字符;
位置锚定:
^: 锚定行首
$: 锚定行尾
^$: 锚定空白行
\<: 锚定词首
\>: 锚定词尾
\b: 锚定词首或词尾
分组:
(): 常用在模式中前面匹配到了指定的字符串,而这段字符后面也需要引用相同的字符串;
():匹配 \1 \2 \3 引用 ;
模式自左而右,引用第# 个左括号以及与其基本右括号之间的模式匹配到的内容;
或者:
a|b:a或者b
ab|cd:ab或者 cd ,表示整个;
a(b)|(c)d:这个表示单一一个或;
# grep -E 'pattern' file ...
# egrep 'pattern' file ...
以上就是正则表达式grep、egrep的简单用法,马哥说让不懂的人一看就能懂,具体懂不懂就看你悟性;