标签:grep正则表达式
文本查找的需要:
grep:global research,根据模式,搜索文本,并将符合模式的文本行显示出来。
egrep,fgrep
pattern:模式英文,文本字符和正则表达式的元字符组合而成匹配条件。
grep [optians] [pattern] file...
-i --ignore-case 忽略大小写
--color
-v 反向查找 被模式匹配的行不显示
-o 只显示被模式匹配到的字符串
* :任意长度的任意字符
?:任意单个字符
[]:指定范围内的
[^]:指定范围外的
正则表达式:Regular EXPression,REGEXP
grep ‘pattern‘ file
元字符:
.:匹配任意单个字符;
[]:匹配指定范围的任意单个字符
[^]:匹配指定范围外的单个字符
[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:],[:digit:]
匹配次数:
*:匹配其前面的字符任意次
a, b ,ab, aab,acb,adb,amnb
a*b
a.*b
.*:任意长度的任意字符
\?:做次数匹配,匹配其前面的字符一次或零次
正常工作在贪婪模式下,尽可能长的去匹配
\{m,n\}:匹配其前字符至少M次,至多N次
\{1,\}至少一次
\{0,3\} 最多三次
grep ‘a\{1,3\}b a
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首。
grep ‘^r..t‘ /etc/passwd
$:锚定行尾,此字符前面的任意内容必须出现在行尾
grep ‘y$‘ /etc/inittab
grep ‘b..h$‘ /etc/passwd
^$:空白行
锚定词首:
\<: 其后面的任意字符必须作为单词,首部出现,锚定词首
\>:其前面的任意字符必须作为单词,尾部出现,锚定词尾
\<root\>
\broot\b =\<root\> ,可以使用b代替<,>
分组:
\(\)
\(ab\)* ab可以出现0次,1次,任意次
grep ‘\(l..e\).*\(l..e\)‘ a 匹配以l..e的,并且中间是任意字符
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容
\2:
\3:
grep ‘\([0-9]\).*\1$ /etc/inittab 行中出现数字并且以相同数字结尾的
grep ‘\(^[0-9]\).*\1$ /etc/passwd 以首先开关的数字并且以相同数字结尾的
练习:分析/etc/inittab文件中如下文件中前两行的特征(每一行中出现数字必须相同),请写出可以精确找到类似两行的模式:
11:1:wait:/etc/rc.d/rc 1
13:3:wait:/etc/rc.d/rc 3
grep ‘^1\([0-9]\).\1.*\1$‘
正则表达式:
Basic REGEXP:基本
Extended REGEXP:扩展
基本正则表达式:
.:任意单个字符
[]:指定范围
[^]:指定范围以外的
次数匹配:
*:其前的任意次
\?:0次或者1次
\{m,n\)}:至少M次,到多N次
.*:任意长度的字符
锚定:
^:行首
$:行尾
\<,\b:后面的任意单词,必须出现在首部
\>,\b:前面的任意单词,必须出现在尾部
\(\)用于分组的
\1,\2,\3.....用于后向引用
grep:使用基本正则表达式定义的模式来过滤文本的命令
-i
-v 反向搜索,不匹配的显示
-o 只显示匹配到的字符串
--color
-E :使用扩展正则表达式
-A#(数值):当某一行被grep指定的模式匹配后,
grep -A 2 ‘^core id‘ /proc/cpuinfo 后面的2行
-B:
grep -B 2 ‘^core id‘ /proc/cpuinfo 前面2行
-C:-C2 前后各2行
扩展正则表达式:
字符匹配:与基本一样
.
[]
[^]
次数匹配
*:与基本一样
?:其前一次或零次
+:其前字符至少一次,匹配其前面字符至少1次
+*近似*
{m,n},不需要使用\,直接使用
位置锚定与基本一样
分组:
():分组
\1,\2,\3,....
|:或者:a|b or的意思
grep --color -E c|cat a.txt
egrep ‘\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9]\b‘
标签:grep正则表达式
原文地址:http://leozhenping.blog.51cto.com/10043183/1629994