grep、egrep及相应的正则表达式和用法
grep与egrep都是基于“PATTERN”对指定的文本进行搜索 (文本处理三剑客之一) grep与egrep的区别在于grep默认支持的是基本正则表达式egrep默认支持扩展的正则表达式 先从grep的选项说起 使用格式:grep [OPTION]... PATTERN [FILE]... 有以下选项:
-i,--ignore-case:忽略文本字符的大小写 -v,--invert-match:反向匹配;最终显示的结果是PATTERN不能成功匹配的行 -C NUM,-NUM,--context=NUM:统计匹配PATTERN的所有的行数; -o,--only-matching;关闭贪婪模式,仅显示PATTERN匹配的内容 -q,--quiet,--silent:不输出任何匹配结果 --color[=WHEN],--colour[=WHEN]:将匹配的PATTERN内容以特殊颜色高亮显示 -E,--extended-regexp:扩展的正则表达式,grep -E相当于egrep -F,--fixed-strings,--fixed-regexp:相当于fgrep -G,--basic-regexp:基本的正则表达式,即egrep -G相当于grep -p,--perl-regexp:使用PCRE(perl Common Regular Expression)引擎; -A NUM,--after-context=NUM:在显示匹配PATTERN行的同时显示其后面的NUM行 -B NUM,--before-context=NUM:在显示匹配PATTERN行的同时显示其前面的NUM行 -C NUM,--context=NUM:在显示匹配PATTERN行的同时显示其前后的各NUM行 重要的部分就是PATTERN区域,系正则表达式元字符匹配; 字符匹配类: .:匹配任意单个字符 例子:
[]:匹配范围内的任意单个字符 例子: [^]:匹配指定范围以外的任意单个字符; 例子:
下列的所有的字符集都可以放置于[]之中用于匹配单个字符; [:xdigit:]:所有的16进制数字 a-z:所有的小写字母 A-Z: 所有的大写字母 0-9:所有的十进制数字 次数匹配字符:该类字符之前的那个字符可以出现的次数; *:其前面的字符可以出现人意次(0次,1次或多次); 例子:
?:其前面的字符可有可无(0次或1次) 例子:
+:其前面的字符至少出现一次(1次或多次) 举例:grep 'x*y' /PATH :匹配含有y字符前面有或没有x字符的行 {m}:其前面的字符必须出现m次 例子:
{m,n}:其前面的字符至少出现m次,至多出现n次;(m<n) {,n}:其前面的字符只收出现0次,至多出现n次 {m,}:其前面的字符至少出现m次,多多益善; 在正则表达式中,表示任意长度任意字符的方式:.* 位置锚定字符: 行锚定: 行首锚定:^ 行尾锚定:$ 字锚定: 字首锚定:&;或b 字尾锚定: &;或b b:旧版本中的锚定方法,建议不使用; 例子: 查找显示root用户
对于正则表达式引擎来说,字是由非特殊字符组成的字符串 分组与引用字符: (PATTERN):将PATTERN匹配到字符作为一个整体来处理 例子:grep '(xy)+' 文件名 匹配含有xy的行
在正则表达式引擎之中,有一系列内置变量,这些变量会保存所有分组内的字符信息,用于后向引用;这些变量一次是:1,2,3,... pattern1(pattern2)pattern3(pattern4(pattern5)) 1:pattern2 2:pattern4 3:pattern5 所以1:第一组小括号中的pattern匹配到的字符; 2:第二组小括号中的pattern匹配到的字符; ... 例子:找出在/etc/passwd中用户的UID和GID相同的用户账户:
或:| 注意:|将其左右两遍的字符串当作整体对待 例子:找出ifconfig命令的执行结果中数值在100-255之间的整数; 第一位: 1 2 第二位: 0-9 0-4 5 第三位: 0-9 0-9 0-5
egrep : egrep [OPTIONS] PATTERN [FILE...] 扩展的正则表达式元字符: 字符匹配: . [] [^] 次数匹配: * ? + {m} {m,n} {0,n} 位置锚定 ^ $ &;,b &;,b 分组和引用: () 1,... 或: | (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |