正则表达式(笔记)
来源:互联网 发布:淘宝口令变成链接 编辑:程序博客网 时间:2024/05/21 09:37
正规表示法《鸟哥的linux私房菜》
正规表示法(RegularExpression),有叫正则表达式。简单的说,正规表示法就是处理字符串的方法。
首先要理解一下下面的符号:
[:alnum:]代表英文大小写字符及数字,亦即0-9,A-Z,a-z
[:alpha:]代表任何英文大小写字符,亦即A-Z,a-z
[:blank:]代表空格和tab键
[:cntrl:]代表键盘上的控制按键,包括CR,LF,Tab,Del等等
[:digit:]代表数字,亦即0-9
[:graph:]代表空格(空格键和tab键)外的其他所有按键
[:lower:]代表小写字符,亦即a-z
[:print:]代表任何可以被打印的字符
[:punct:]代表标点符号(punctuationsymbol)
[:upper:]代表大写字符,亦即A-Z
[:space:]代表任何会产生空白的字符,空格,tab,CR等
[:xdigit:]代表16进位的数字类型,因此包括:0-9,a-f,A-F
我们通过使用grep命令来学习正则表达式,grep是一个很常见的指令,其功能是进行字符串数据的比对,然后将符合用户需求的字符串打印出来下面是grep命令的使用方法:
grep[-A] [-B] [--color=auto] '搜寻字符串'filename
-A:后面可以加数字,=after,除了列出该行外,后续的n行也列出来;
-B:后面可以加数字,=before,除了列出该行外,前面的n行也列出来;
--color=auto可以将正确抓取的数据列出颜色。
1.搜寻特定的字符串
grep-n 'the' reg.txt表示在名为reg.txt文件里搜寻带有'the'的那一行,-n表示标出行数。
反向搜寻,当该行没有'the'字符串时,显示该行
grep-vn 'the' reg.txt
取得不论大小写的'the'字符串
grep-in 'the' reg.txt
2.利用中括号[]来搜寻集合字符串
要搜寻'test'和'taste'两个字符串,可以发现它们都含有't?st'存在,则可以这样搜寻
grep-n 't[ae]st' reg.txt
由上一条指令可以知道,不管[]中有几个字符,都代表一个字符,表示a或者e的意思。
搜寻含有'oo'字符时
grep-n 'oo' reg.txt
如果不希望'oo'前面有字符g的话,可以利用在集合字符的反向选择[^]来达成:
grep-n '[^g]oo' reg.txt
如果不希望'oo'前面有小写字母,使用正则表达式:
grep-n '[^a-z]oo' reg.txt
如果希望取得含有数字的一行
grep-n '[0-9]' reg.txt或者 grep-n '[:digit:]' reg.txt
3.行首与行尾字符
想要打印行首为'the'的那一行
grep-n '^the' reg.txt
打印行首为小写字母的数据行
grep-n '^[a-z]' reg.txt或者 grep-n '^[[:lower:]]' reg.txt
打印行首不为英文字母的数据行
grep-n '^[a-zA-Z]' reg.txt或者 grep-n '^[^[:alpha:]]' reg.txt
打印行尾为小数点的数据行
grep-n '\.$' reg.txt使用\跳脱小数点
搜寻空白行
grep-n '^$' reg.txt
grep-v '^$' reg.txt|grep -v '^#'代表不要空白行,不要行首为#的数据行
4.任意一个字符.与重复字符*
在bash当中,通配符*可以用来代表(0或多个)字符,但正则表示法不同。
.小数点:代表‘一定有一个任意字符’的意思;
*星号:代表‘重复前一个0到无穷多次’的意思,为组合形态
例如,找出含有'g??d'的字符,即共有四个字符,字符以g开头,d结尾
grep-n 'g..d' reg.txt其中,一个小数点代表一个任意字符
*代表‘重复0个或多个前面的任意字符’,所以o*代表:拥有空字符或者一个o以上的在哦符,注意,因为允许空字符(没有字符也可以),因此grep-n 'o*' reg.txt 会把所有数据都打印出来。
oo*,表示第一个o必须存在,第二个o可以没有,也可有有无穷多个,所以只要含有o字符的数据行都会被打印
如果需要打印至少含有两个o的字符串,需要ooo*
如果,字符串开头和结尾都是g,两个g之间治沙存在一个o,如何打印?
grep-n 'goo*g' reg.txt
打印字符串开头结尾为g,中间可有可无其他字符:
grep-n 'g.*g' reg.txt
打印含有任意数字字符的数据:
grep-n '[0-9][0-9]*' reg.txt或者grep-n '[[:digit:]]' reg.txt
5.限定连续任意字符范围{}
上面的例子中,我们可以使用小数点,任意字符即*来设定0到无限多个重复字符,那如何限制一个范围内区间内的重复字符呢?使用{}字符。由于{和}两个符号在shell中有特殊意义,我们必须用跳脱字符\来使其跳脱。例如,要寻找两个o的字符串:
grep-n 'o\{2\}' reg.txt
要搜寻g后面接2-5个o,在接一个g的字符串:
grep-n 'go\{2,5\}g' reg.txt
如果要搜寻两个以上的o:
grep-n 'go\{2,\}g' reg.txt或者 grep-n 'gooo*g' reg.txt
强调:正规表示法的特殊字符和一般在指令列输入指令的通配符不一样,比如在通配符中*代表0到无限多个字符,在正规表示法中,*代表重复0到无限多个前一个字符。
指令ls并不支持正规表示法,ls-l * 代表任意档案名的档案,而ls-l a*代表以a为开头的任何档案名的档案。如果搭配支持正规表示法的工具,寻找以a开头的档案:ls| grep '^a'
例题:用ls-l配合grep寻找/etc/底下的文件类型为链接文件属性的文件名
答:符合条件的文件表头为:lrwxrwxrwx
则指令可写为:ls-l /etc | grep '^l'
- 正则表达式(笔记)
- 正则表达式(笔记)
- 正则表达式笔记(一)
- 正则表达式笔记(二)
- 正则表达式笔记(三)
- 正则表达式(初识笔记)
- 正则表达式笔记(一)
- Linux正则表达式(笔记)
- 正则表达式(笔记一)
- 正则表达式(笔记二)
- 正则表达式笔记(第一弹:正则表达式基础)
- 精通正则表达式--正则表达式入门(1)总结笔记
- 正则表达式 学习笔记(一)
- JDK6笔记(3)----正则表达式
- JDK6笔记(4)----正则表达式2
- 正则表达式学习笔记(一)
- 正则表达式学习笔记(一)
- 正则表达式学习笔记(二)
- 编程之美之加法的面试题
- 【剑指offer】面试题4:替换空格
- 相位补偿
- 【zendframework】ZendFramework的介绍、安装和实例运行
- 迅搜中文分词简明教程
- 正则表达式(笔记)
- 句法模式识别(二)-正规文法、上下文无关文法
- cocos2dx场景切换中init、onEnter、onEnterTransitionDidFinish的调用顺序
- 查找(二)简单清晰的B树、Trie树详解
- 约瑟夫问题 c++代码
- Cocos2d-x 渲染自定义字体--bmfont工具简单使用
- 21、下载整个网站。
- 模式匹配KMP POJ 3461
- OCP-1Z0-051 第148题 子查询和ANY,ALL的使用