grep (Global Regular Expression Print)是一种文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来,egrep (Extended grep)扩展正则表达式,
语法
grep [options] PATTERN [FILE…]
PATTERN(模式): 文本字符和正则表达式的起名字符组合而成匹配条件
options(参数)
-i --ignore-case 忽略字母大小写
--color 高亮显示匹配的字符
-v 显示没有被模式匹配到的行
-o 只显示被模式匹配到的字符串
-A # 显示搜索到的行及后面#行的内容
-B # ………………………..前面#行的内容
-C # ………………………….前后各#行的内容
正则表达式:REGular EXPression, REGEXP 正则表达式是一种表示方式,让你可以查找匹配特定准则的文本。
grep 引号的意义
‘ ’: 强引用,所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换。grep ‘$a’file 表示的时查找 ‘$a’字符
“ ”: 把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。grep “$a”file 表示引用变量a,查找变量a的值
不加引号 : 不会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用
正则表达式由两个基本组成部队建立:一般字符和特殊字符,一般字符指没有特殊意义的字符,特殊字符常称为元字符。
元字符:
\ : 转义符,如果元字符前面加有‘\’ 就表示为其本身的意义,不再有元字符的特殊意义
. : 匹配任意单个字符
[ ] : 匹配指定范围内的任意单个字符
[^]: 匹配指定范围外的任意单个字符
字符集合
[:digit:] 表示数字集合0-9 [[:digit:]]与[0-9]的意义相同
[:lower:] 小写字母集合
[:upper:] 大写字母集合
[:punct:] 标点符号字符
[:space:] 空白格符[:blank:]空格(space)与定位(tab)字符
[:alpha:] 字母字符包括大小写
[:alnum:] 字母数字字符(包括大小写)
匹配次数字符
* : 匹配前面字符任意次,包括0
.* : 表示任意长度任意字符
\? : 匹配前面的字符一次或零次
\{m,n\} : 匹配其前面字符至少m次,至多n次,如果最多次数不限,n可以省略不写,如果表示至少为0次,m可以写为0,但不能不写。\{1,\} \{0,3\}
注意: ‘\’ 在正则表达式中也代表有转义的意思,与bash本身的意义区别。如?在bash中表示任意一个字符,这里\?表示的是次数,{} 在bash中表示命令展开,在正则表示式中\{m,n\}表示次数,但在扩展正则表达式中可以不用’\‘来区分。
位置锚定:
^ : 锚定行首, 此字符后面的任意内容必须出现在行首
$ : … 行尾, ……………………………………………… 行尾
^$ : 空白行
\< 或 \b : 锚定词首,其后面的任意字符必须做为单词的首部出现
\> 或 \b : …….词尾, ………………………………………………..尾部出现
\<word\> : 匹配整个单词 \< \>
分组:
\(\) : \(alnum\)* 表示把 (alnum) 做为一个整体,匹配任意次
后向引用
\1 : 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 : 第二个
\n : 第n 个
即把前面分组的内容后面再引用
grep 命令就是使用字符或正则表达式规则来匹配文本的命令
egrep 扩展正则表达式,也grep �Ce 命令效果是一样的
.
[]
[^] 与正则表达式的用法一样
次数匹配
* : 和正则表达式作用一样
? : 不用加 ’\’
+ : 匹配其前面的字符至少一次,类似正则表达式 \{1,\}
{m,n} : 不使用斜线
位置锚定符与正则表达式一样
分组:
( ) : 与正则表达式\( \) 相比,不需要斜线
\1 \2 \3 后向引用
或者符
| :or 或意义 C|cat 表达的是C 或者 cat , (C|c)at 表示 Cat|cat 的意义