◊基本框架:
a) grep命令
b) 正则表达式
c) grep中使用正则表达式
d) vi中使用正则表达式
9.1 grep命令
命令格式:grep [option] pattern + 文件列表
常用的option:
-E 用扩充的正则表达式进行模式匹配
-i 不区分大小写
-n 显示行号
-v 反向匹配(匹配不符合要求的)
-l 返回匹配到的文件名称
-r 递归搜索
在多个文件中进行查找时,文件列表中可以使用通配符*
9.2 正则表达式
定义:描述具有某种特征的字符串的表达式。
正则表达式包含普通字符和特殊字符(元字符)。
元字符集分为两类:基本的元字符集和扩充的元字符集。
9.2.1基本的元字符集:
^ 行首开始匹配
$ 行尾进行匹配
找空行的方法: grep –n ^$ filename
\< 从单词的开头进行匹配
3种方法:(若查找public)
grep -n ‘\<public’ filename(多用单引号的方法)
grep -n “\\<public” filename
grep -n \\\<public filename
执行机理:
grep命令中的pattern字段先被shell解析,然后再将解析后的结果提交给grep字段。
单引号可以抑制shell对pattern字段特殊字符的解析,将pattern字段原封不动的提交给grep 。
而双引号只能抑制部分符号(比如说括号),但它不能抑制\和$等。
Shell和grep都将\视为转义字符(特殊字符)。
\> 从单词的末尾进行匹配
. 对单个字符进行匹配
查找只有一个字符的行: grep -n ^.$ filename
[str] 对str中的任意单个字符进行匹配
[^str] 对任意不在str中的单个字符进行匹配
[a-b] 对a到b之间的任何字符进行匹配
\ 抑止后面的一个字符的特殊含义
查找\的三种方法:
1. grep -n ‘\\’ filename(多用单引号的方法)
2. grep -n “\\\\” filename
3. grep -n \\\\ filename
* 对前一项进行0次或多次重复匹配
9.2.2扩展的元字符集:
使用扩展的元字符集grep的格式为: grep -E 或为 egrep
+ 对前一项进行1次或多次重复匹配
{ j } 对前一项进行j次重复匹配
{ j , K } 对前一项进行j到k次重复匹配
s|t 匹配s项或t项中的一项
(exp) 将exp 作为单项处理
9.3 vi中使用正则表达式
例子: 删除aa到zz的所有字符: 1,$ s/aa.*zz//
将整个文件中所有的and替换成&: 1,$ s/and/ \&/g
在每一行的行首插入字符串new: 1,$ s/^/new
在每一行的末尾插入字符串@@: 1,$ s/$/@@
去掉所有行首的数字字符: 1,$ s/^[0-9][0-9]*//