之前的句子
烟锁池塘柳 炮镇海城楼
因荷而得藕 有杏不需梅
认识于小林寒风的一篇小说《凤山遗梦》
grep
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。模式:由正则表达式字符及文本字符所编写的过滤条件
用法:
grep [OPTIONS] PATTERN [FILE…]
简单示例:
grep命令选项
–color=auto :对匹配到的文本着色显示,(CentOS7中“别名”alias中已设置)
-v :显示不被pattern匹配到的行,反向匹配行。
-i :忽略字符大小写
-n :显示匹配的行号
-c :统计匹配的行数
-o :仅显示匹配到的字符串
-H, –with-filename当搜索多个文件时,显示匹配文件名前缀
-h–no-filename当搜索多个文件时,不显示匹配文件名前缀
-q :静默模式,不输出任何信息(注重执行过程,不注重执行的结果)
-e :实现多个选项间的逻辑or关系
示例:grep –e root –e magedu /etc/passwd
-w :匹配整个字符串
-E :使用ERE,扩展正则表达式egrep
-F :相当于fgrep,一个换行符分隔的字符串的集合fgrep,不支持正则表达式。
-A# :after,打印匹配本身以及后#行行
-B# :before, 打印匹配本身以及前#行行
-C# :context, 打印匹配本身以及前后各#行行
正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。简单来说,正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串
正则表达式可分为两类:基本正则表达式:BRE,扩展正则表达式:ERE
按元字符分类:字符匹配、匹配次数、位置锚定、分组,根据元字符分类我们一一介绍两类正则表达式。
基本正则表达式BRE
用法:grep [OPTIONS] PATTERN [FILE…]
元字符分类:
(1)字符匹配:
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:alnum:] :字母和数字
[:alpha:] :代表任何英文大小写字符,亦即A-Z,a-z
[:lower:] :小写字母[:upper:]大写字母
[:blank:] :空白字符(空格和制表符)
[:space:] :水平和垂直的空白字符(比[:blank:]包含的范围广),任何产生空白的字符。
[:cntrl:] :不可打印的控制字符(退格、删除、警铃…))
[:digit:] :十进制数字
[:xdigit:] :十六进制数字
[:graph:] :可打印的非空白字符
[:print:] :可打印字符
[:punct:] :标点符号
(2)匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* :匹配前面的字符任意次,包括零次无限次
.* :任意长度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次
\{n\} :匹配前面的字符n次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
\{n,\} :匹配前面的字符至少n次
(3)位置锚定:定位出现的位置
^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$ :用于模式匹配整行
^$ :空行
^[[:space:]]*$ :空白行
\<或或\b词首锚定,用于单词模式的左侧
\>或或\b词尾锚定;用于单词模式的右侧
\<PATTERN\>匹配整个单词
(4)分组:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符(具体用法可查看扩展正则表达式中的举例)
\|:逻辑关系or 或
示例:显示/proc/meminfo文件中以大小s开头的行
扩展的正则表达式ERE
用法:egrep [OPTIONS] PATTERN [FILE…] 其中:egrep等价于grep –E
元字符分类:
(1)字符匹配:
. :任意单个字符
[] :指定范围的字符
[^] :不在指定范围的字符
(2)次数匹配:
* :匹配前面字符任意次
? :0或1次
+ :1次或多次
{m} :匹配m次
{m,n} :至少m,至多n次
(3)位置锚定:
^ :行首
$ :行尾
\<,\b :语首
\>,\b :语尾
(4)分组:
():将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:\(root\)\+分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…,其中涉及后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:后向引用,
显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行。
cat /etc/grub2.cfg | grep “^\([[:blank:]]\)\{1,\}[^\1]”
|:逻辑关系 或 or (相似基本正则表达式)
简单对比一下就会发现,基本正则表达式和扩展正则表达式的区别就在于拓展正则表达中好多符号可以不用加“\”转义字符,除了后向引用“\1、\2…”和位置锚定“\b、\>…”
文本处理工具系列圆满结束,以后发现需要补充的会及时更新,最后的往往是最重要的,此次总结可能存在疏漏,请各位大佬批评指正。
文本处理工具系列<1>http://www.178linux.com/82973 <2>http://www.178linux.com/83083
原创文章,作者:Mozart,如若转载,请注明出处:http://www.178linux.com/83512