Linux 学习笔记(十四):Linux 正则表达式基础

grep 命令


作为linux中最为常用的三大文本(awk(Linux awk教程),sed(Linux sed教程),grep)处理工具之一,掌握好其用法是很有必要的。grep家族总共有三个:grep,egrep,fgrep。

grep命令的常用格式为:grep [option] “mode” [file]
常用参数:

参数 说明
-E 开启扩展(Extend)的正则表达式
-i 忽略大小写(ignore case)
-v 反过来(invert),只打印没有匹配的,而匹配的反而不打印
-n 显示行号
-w 被匹配的文本只能是单词,而不能是单词中的某一部分
-c 显示总共有多少行被匹配到了,而不是显示被匹配到的内容
-o 只显示被模式匹配到的字符串
--color 将匹配到的内容以颜色高亮显示
-A n 显示匹配到的字符串所在的行及其后n行(after)
-B n 显示匹配到的字符串所在的行及其前n行(before)
-C n 显示匹配到的字符串所在的行及其前后各n行(context)

详细请参考:flyor 的博客:linux中grep命令的用法

模式部分


1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:grep -c "printf" hello.c

2、使用基本正则表达式,下面谈关于基本正则表达式的使用:

匹配字符:
. :任意一个字符。
[abc] :表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。

对于一些常用的字符集,系统做了定义:
[A-Za-z] 等价于 [[:alpha:]]
[0-9] 等价于 [[:digit:]]
[A-Za-z0-9] 等价于 [[:alnum:]]
tab,space 等空白字符 [[:space:]]
[A-Z] 等价于 [[:upper:]]
[a-z] 等价于 [[:lower:]]
标点符号 [[:punct:]]

匹配次数:
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。
\? :匹配其前面出现的内容0次或1次,等价于{0,1}。
\* :匹配其前面出现的内容任意次,等价于{0,},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。

位置锚定:
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b~或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
~\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。

分组及引用:
\(string\) :将string作为一个整体方便后面引用
\1 :引用第1个左括号及其对应的右括号所匹配的内容。
\2 :引用第2个左括号及其对应的右括号所匹配的内容。
\n :引用第n个左括号及其对应的右括号所匹配的内容。

优先级
优先级为从上到下从左到右,依次降低:

运算符 说明
\ 转义符
() 、(?:) 、(?=)、 [] 括号和中括号
*、+、?、{n}、{n,}、{n,m} 限定符
^、$、\ 任何元字符、定位点和序列
选择

你可能感兴趣的:(Linux 学习笔记(十四):Linux 正则表达式基础)