grep与正则表达式
grep
grep全称为Global search REgular expression and Print out the line,此命令是在Linux中
著名的文本三剑客之一,本命令可用于打印出文件中匹配的内容,复杂的匹配内容可以使用正则表达式来实现。
grep的命令使用格式
grep [OPTION]… PATTERN [FILE]…
grep常用选项
选项 | 说明 |
---|---|
–color=auto | 对匹配到的文本着色显示,grep默认匹配到的文字是着色的 |
-m # | 匹配#次后停止 |
-v | 显示不被匹配到的行 |
-i | 忽略字符大小写 |
-n | 显示匹配到的行号 |
-c | 统计匹配到的行号 |
-o | 仅显示匹配到的字符串 |
-q | 静默模式,不输出任何信息 |
-A # | after,后#行 |
-B # | before,前#后 |
-C # | context,前后各#行 |
-e | 实现多个选项间的逻辑or关系 |
-w | 匹配到整个单词 |
-E | 使用ERE(支持扩展正则表达式) |
-F | 相当于fgrep,不支持正则表达式 |
-f | file根据模式文件处理 |
命令演示
例1、grep -m
例2、grep -o 与grep -v
例3、grep -i
例4、grep -n 与grep -c
例5、grep -A grep-B 与grep -C
例6、grep -e
例7、grep -w
正则表达式
正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式使用广泛,在各种编程语言中都有对应的库,Linux中很多命令都支持正则表达式,比如前面介绍的grep命令。正则表达式有两种:正则表达式和扩展正则表达式,两者相差不多。正则表达式的元字符从功能上可以分为四种:字符匹配、次数匹配、位置锚定、分组和逻辑组合。
字符匹配
格式 | 说明 |
---|---|
. | 匹配任意单个字符 |
[] | 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z] |
[^] | 匹配指定范围外的任意单个字符 |
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 水平和垂直的空白字符(比[:blank:]包含的范围广) |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃…) |
[:digit:] | 十进制数字 |
[:xdigit:] | 十六进制数字 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号 |
匹配次数
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
格式 | 说明 |
---|---|
* | 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 |
.* | 任意长度的任意字符 |
\? | 匹配其前面的字符0或1次 |
\+ | 匹配其前面的字符至少1次 |
\{n\} | 匹配前面的字符n次 |
\{m,n\} | 匹配前面的字符至少m次,至多n次 |
\{,n\} | 匹配前面的字符至多n次 |
\{n,\} | 匹配前面的字符至少n次 |
位置锚定
位置锚定:定位出现的位置
格式 | 说明 |
---|---|
^ | 行首锚定,用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
^PATTERN$ | 用于模式匹配整行 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\< 或 \b | 词首锚定,用于单词模式的左侧 |
\> 或 \b | 词尾锚定,用于单词模式的右侧 |
\<PATTERN\> | 匹配整个单词 |
分组和逻辑处理
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体处理
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些 变量的命名方式为: \1, \2, \3, …
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:
a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat
扩展正则表达式
字符匹配
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次
位置锚定
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾
分组
分组 :() 后向引用:\1, \2, …
或者:|
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
命令演示
例1、匹配单个字符
例2、用正则表达式和扩展正则表达式取出ifconfig中的IP地址
例3、\<和\>