grep,egrep,fgrep
grep:global research 根据模式,搜索文本,并将符合模式的文本行显示出来(部分匹配,显示整行)。使用基本正则表达式定义的模式来过滤文本的命令。
Pattern:模式。文本字符和正则表达式的元字符组合而成的匹配条件。
grep [options] PATTERN [FILE...]
-i:ignore-case 忽略字符大小写
--color:将匹配到的字符串显示颜色
-v:反向查找,显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
-E:使用扩展正则表达式 grep -E = egrep
-A #:显示匹配到的行及后#行(after)
-B #:显示匹配到的行及前#行(before)
-C #:显示匹配到的行及前后#行(context)
正则表达式:REGular EXPression, REGEXP。由不表示字符本身意义的元字符组成(所以带\),通常做通配,锚定等特殊意义。
元字符(meta-cha):
.:匹配任意单个字符
[ ]、[^] 同globbing
匹配次数(贪婪模式:尽可能长的匹配):
*:匹配其前面的字符任意次 a*b 只能匹配到任意次数的a接b,可以匹配的字符串包括b,ab,aaab,aaaaaaaab。不能匹配的字符串如a,acb,anmb。(注意与globbing区分开)
.*:任意长度的任意字符
?:匹配其前面的字符1次或0次(经常要加\,转义符,\?)
\{m,n\}:匹配其前面的字符至少m次,至多n次(n省略表示没有上限,m不能省略,“,n”省略表示就出现m次)(\表示不要被识别为命令行展开)
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现(linux中的单词即中间不含:?等特殊字符的单词,r55t也属于单词。且r55t.中的.等特殊字符不被认为是单词的一部分)
分组:
\(\):如\(ab\)*,把ab作为一个整体,ab可以出现任意次。问:为什么匹配不到aab?
后向引用(后面可以引用前面被匹配到的内容):
\1:第一个左括号以及与之对应的右括号所包括的所有内容
\2:..
\3:..
如 grep '\(l..e\).*\1' FILE 意思为\(l..e\)匹配到的内容(第一个括号)中间.*后又出现一次(\1含义)
正则表达式:Basic REGEXP:基本正则表达式
Extended REGEXP:扩展正则表达式
二者所支持的元字符有一部分是不一样的,甚至有些相同元字符的意义也不尽相同
扩展正则表达式:
字符匹配:. [ ] [^](同基本)
次数匹配:* ?
+:匹配其前面的字符至少1次
{m,n}:不需要加\
位置锚定:^ $ \< \>
分组:():分组(不需要加\)
\1,\2,\3,...
或者:|:or,或者 如a|b,或者的部分是|的整个左边和整个右边。如C|cat是指C或者cat而不是Cat或者cat。
IPv4:5类:A B C D E
A:1-127
B:128-191
C:192-223
fgrep:fast grep 不支持正则表达式(所以速度比较快)
网友评论