正则表达式介绍与基础
概念
正则表达式(Regular Expression)是一个定义搜索模式的字符序列。
使用**单个字符串**来描述、匹配一系列符合某个**句法规则**的字符串
在做文字处理或编写程序时,如需要用到查找、替换等功能时,可以使用正则表达式快速达到目的。
特殊符号
内容
参数 |
含义 |
[:alnum:] |
英文大小写字母及数字 |
[:alpha:] |
英文大小写字母 |
[:blank:] |
空格和tab键 |
[:cntrl:] |
键盘上的控制按键,如CR,LF,TAB,DEL |
[:digit:] |
数字 |
[:graph:] |
空白字符意外的其他 |
[:lower:] |
小写字母 |
[:print:] |
可以被打印出来的任何字符 |
[:punct:] |
标点符号 |
[:upper:] |
大写字母 |
[:space:] |
任何会产生空白的字符,如空格,tab,CR等 |
[:xdigit:] |
十六进制的数字类型 |
实例
- 使用特使符号查找text.txt文件中的小写字母
grep -n '[[:lower:]]' text.txt
- 使用特使符号查找text.txt文件中的数字
grep -n '[[:digit:]]' text.txt
grep命令与正则表达式
参数说明
- -a:以text档案的方式搜寻binary档案数据
- -c:计算找到'搜寻字符串'的次数
- -i:忽略大小写
- -n:输出行号
- -v:反向选择,即显示没有'搜寻字符串'内容的行
实例
grep -n 'the' text.txt #输出有‘the’的行
grep -in 'the' text.txt #输出忽略大小写的‘the’行
grep -vn 'the' text.txt #反向选择,输出没有‘the’的行
字符组匹配
[]可以用来查找数组
注意:无论[]中包含多少个字符,它都只代表一个字符。
比如要查找“tast”或者“test”这两个字符串,都是t?st形式,所以我们可以使用[]进行查找:
grep -n 't[ae]st' text.txt
字符组支持使用连字符“-”,表示一个范围
注意:当“-”前后构成范围时,要求前面字符的码位小于后面字符的码位。
[^]为反向选择字符组
用于排除后面的字符,使用方式为:[^需要反向选择的字符]
注意[^]与参数-v的区别,两者都表示反向选择,但如果包含有反向选择的字符的行含有其他字符的话,[^]仍会输出该行,而-v只会输出不含有反向选择的字符的行。
实例
参数 |
含义 |
[abc] |
表示“a”或“b”或“c” |
[0-9] |
0-9任意一个数字,等价于[0123456789] |
[u4e00-u9fa5] |
任意一个汉字 |
[^a1<] |
除“a”,“1”,“<”外的其他任意一个字符 |
^a-z] |
除小写字母外的任意一个字符 |
grep -n '[^a-z]oo' text.txt # 查找Xoo形式的字符串,要求“oo”前不能有小字母
grep -n '[^[:lower:]]' text.txt # 等价于上一条
grep -n 'oog' text.txt # 查找包含“oog”的字符串
grep -n '[^go]oog' text.txt # 查找包含“oog”的字符串,并且“oog”前不能有“g”或者“o”
行首行尾符
行首符^
grep -n '^the' text.txt # 查找行首为“the”的行
grep -n '^[A-Z]' text.txt # 查找行首为大写字母的所有行
注意:行首符^和反向选择[^]的区别,'^[A-Z]'表示以大写字母开头,'[^A-Z]'表示除了大写字母A-Z的所有字符
行尾符$
grep -n 'd$' text.txt # 查找以字母d为结尾的行
grep -n '^$' text.txt # 小技巧,将行首和行尾符连用,可以用来查找空行
grep -v '^$' text.txt | grep -v '^#' # 过滤掉空白行和注释行(以#开头)
任意和重复字符
grep -n 'a.ou.' text.txt # 查找a?ou?形式的字符
其中小数点'.'表示任意一个字符,一个小数点只能表示一个未知字符
星号* |
含义 |
* |
重复前面0个或多个字符 |
e* |
空字符或者一个以上e字符 |
ee* |
第一个e必须存在,第二个e则可以是0个或者多个 |
eee* |
第一个和第二个e必须存在,第三个e可以是0或者多个 |
ee*e |
第一个和第三个e必须存在,第二个e可以是0或者多个 |
限定连续字符范围{}
{}可限制一个范围区间内重复字符数
grep -n 'ooo*' text.txt # 查找连续2个o字符的字符串
grep -n 'o{2}' text.txt # {}需要转义字符
grep -n 'go{2,5}g' text.txt # 查找g后面接2个到5个o,再接g的字符串
总结
参数 |
含义 |
^word |
查找word为行首的行 |
word$ |
查找word为行尾的行 |
.(小数点) |
表示1个任意字符 |
* |
重复0到无穷多个前一个RE字符 |
[list] |
查找含有l,i,s,t任意一个字符的字符串 |
[n1-n2] |
查找致电给字符串范围,如[0-9],[a-z],[A-Z] |
[^list] |
反向搜索,查找不含有l,i,s,t任意一个字符的字符串 |
{n,m} |
找出n到m个前一个RE字符 |
{n,} |
找出n个以上的前一个RE字符 |
TO BE CONTINUED...