正则表达式和使用正则表达式的grep,sed,awk等工具

本文介绍正则表达式和支持正则表达式的linux命令,如grep sed awk等工具
另外,c++标准库提供了std::regex来解析正则表达式。可以参考《c++标准库》。
一 : 正则表达式
正则表达式就是为了可以批处理文本,提供一些字符串的特殊匹配功能,比一般的通配符要强大和灵活,但也要注意不要和linux shell的通配符混在一起,通配符是大部分linux cmd都支持的简单的字符匹配,但正则表达式只有少数命令支持,两者的规则也是不一样的,通配符在我的linux shell script文章中有介绍,这里介绍正则表达式,正则表达式分为基础正则表达式和增强正则表达式。grep sed awk等工具都支持基础正则表达式,要支持增强正则表达式,需要grep -E 或者直接用egrep。
首先介绍基础正则表达式
1.^word : 待查找的字符串(word)在行首。如grep -n '^#' ./test 在test文件中查找以#开头的字符串
2.word$ :待查找的字符串(word)在行尾。 如grep -n '#$' ./test 在test文件中查找以#结尾的字符串
3. . : 代表一定有一个任意字符。如 grep -n 'a.c' ./test 在test文件中查找以a开头,以c结尾,中间只有一个任意字符的字符串。
4. \ : 转义字符,如果要查找的字符串中有如^$等特殊意义字符,就需用用转移字符来修饰
5. * : 重复0个到无穷多个的前一个字符,注意是重复前一个字符,不是代表任意字符。如 grep -n 'go*' ./test 在test文件中查找g,go,goo,gooo….等,注意g也算一个,以为o*代表重复o零次到无穷次。
6. [list] : 从字符集合中找出要选取的字符,[ ]中代表一个待查找的字符。如grep -n 'g[ld]a' ./test 就是在test中查找gla和gda。
7. [n1-n2] : 代表n1到n2之间所有的字符。如grep -n '[0-9]' ./test 在test中查找0到9里面的所有数字,也可以[a-z]
8. [^list] :查找除了list中的字符。如 grep -n 'oo[^A-Z]' ./test 在test中查找oo后面不跟大写字母的字符。
9. {n,m} : 连续n到m个前一个字符,若{n},标识n个前一个字符,若{n,}代表n个以上前一个字符。因为{}为特殊字符,所以需要转义字符修饰。 如: grep -n 'go\{2,3\}g' ./test 在test中查找goog gooog这两个字符串。

二 增强正则表达式
1. + : 重复一个或一个以上的前一个字符。 如egrep -n 'go+d' ./test 在test中查找god,good,goood…等。
2. ? : 零个或一个的前一个字符。 如egrep -n 'go?d' ./test 在test中查找gd,god字符
3. | :用or(或)的方式找出数个字符串。 例如 egrep -n 'gd|good' ./test 在test文件中寻找gd和good这两个字符
4. () : ()中提供可供选择的list。如egrep -n 'g(la|oo)d' ./test 在test中查找glad 和 good这两个字符串
5. ()+ : 多个重复组的判别.如:egrep -n 'A(xyz)+C' ./test 在test中查找以A开头,以C结尾,中间有一个以上xyz的字符串。

你可能感兴趣的:(linux)