您的位置:首页 > 其它

学习笔记(8)——正则表达式

2015-12-21 10:21 423 查看
正则表达式就是处理字符串的方法(已行为单位)。

Linux系统中,语系对正则表达式的使用是有影响的。就编码顺序而言,当LANG=C时:0-9A-Za-z;当LANG=zh_CN时:0-9aA-zZ。这一差异使得正则表达式在使用“[n1-n2]”时会出现问题。

符号表示:在不确定语系或是不方面更改语系时,建议使用这种表示符号代替[n1-n2]的使用方式,以免发生错误。

[:alnum:]:英文大小写字母以及数字。

[:alpha:]:英文大小写字母。

[b] [:digit:][/b]:数字。

[:lower:]:小写字母。

[b] [:upper:][/b]:大写字母。

[:blank:]:空格键或TAB键。

[:cntrl:]:键盘上面的控制键,包括CR,LF,TAB,Del等。

[:graph:]:除了空格键和TAB键以外的所有按键。

[:print:]:可以被打印出来的字符。

[:punct:]:标点符号。

[:space:]:会产生空白的字符,包括TAB等。

[:xdigit:]:十六进制的数字类型。

正则表达式的符号:暂时与grep命令(笔记7中介绍过)连用,用作筛选。

^word:^字符表示行首,即word字符在行首出现。如:grep -n '^the' test 表示显示test文件中行首为the的行。(-n 参数是显示行编号)

word$:$字符表示行尾,即word字符在行尾出现。如:grep -n '\.$' test 表示显示test文件中行尾为“.”的行。

\:转义字符

.:代表一个确定存在的任意字符。如:grep -n 't.st' test 表示显示test文件中含有“t*st”的行,*可以是任意字符,但必须存在,不能是“tst”。

*:代表0到无穷多个前一个字符。如:grep -n 'tes*t' test 表示显示test文件中含有“te(s)t”的行,其中字符s可以是任意数量的。

[list]:代表从字符集合中选择一个字符。如:grep -n 'te[asdf]t' test 表示显示test文件中含有“teat”、“test”、“tedt”、“teft”的行。

[n1-n2]:代表在范围内选取一个字符。如:grep -n 'te[a-z]t' test 表示显示test文件中含有“te(S)t”的行,其中字符S可以是小写字母中的任意一个。注意:这种用法最好在LANG=C的语系中使用。

[^list]:代表从不在字符集合中的一个字符。如:grep -n 'te[asdf]t' test 表示显示test文件中含有含有“te(s)t”的行,其中不包括含有“teat”、“test”、“tedt”、“teft”的行。

\{n,m\}:本意为{m,n},但在bash中“{”和“}”是有特殊含义的字符,因此要用\转义字符进行转义。表示:连续n到m个前一个字符,如果m缺省,则表示n到无穷多个;如果m和逗号都缺省,则表示n个前一个字符。如: grep -n 'tes\{1,3\}t' test 表示显示test文件中含有“test”、“tesst”、“tessst”的行。

扩展正则表达式:配合egrep使用,或者grep -E。

+:重复一个或一个以上的前一个字符。

?:重复零个或一个的前一个字符。

|:用或的方式找出数个字符串。如:egrep -n 'test|at' test 表示显示test文件中含有“test”或“at”的行。

():找出组字符串。如:egrep -n 'g(la|oo)d' test 表示显示test文件中含有“glad”或“good”的行。

()+:多个重复组的判别。如egrep -n 'A(test)+B' test 表示显示test文件中以A开头,以B结尾,中间含有一个或一个以上“test”的字符串的所在行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: